模块 java.base
 java.lang

类 Package

java.lang.Object
java.lang.Package
所有已实现的接口:
AnnotatedElement

public class Package extends Object implements AnnotatedElement
表示有关与类加载器关联的运行时包的元数据。元数据包括注释、版本控制和密封。

运行时包的注释从 package-info.class 中读取,代码源与运行时包中的类相同。

构成运行时包的一组类可以实现特定的规范。定义 Package 时,可以提供规范标题、版本和供应商(表示规范的所有者/维护者)。应用程序可以使用 Package.isCompatibleWith(String) 方法询问 Package 是否与特定规范版本兼容。此外,在定义 Package 时,可以提供有关构成运行时包的实际类的信息。此信息由实现标题、版本和供应商(表示类的供应商)组成。

Package 可以使用 ClassLoader.definePackage(String, String, String, String, String, String, String, URL) 方法显式定义。调用者提供规范和实现标题、版本和供应商。调用者还指出包是否为 密封 。如果在定义运行时包中的类时未为运行时包显式定义 Package,则 Package 将由该类的定义类加载器自动定义,如下所示。

为命名模块中的类自动定义的 Package 具有以下属性:

  • 包的名称源自类的二进制名称。由于命名模块中的类必须位于命名包中,因此派生名称永远不会为空。
  • 如果已知,该包使用 模块位置 作为代码源进行密封。
  • 规范和实现标题、版本和供应商未指定。
  • 包上的任何注释都是从上面指定的 package-info.class 读取的。

为未命名模块中的类自动定义的 Package 具有以下属性:

  • 包的名称是 ""(对于未命名包中的类)或派生自类的 二进制名称(对于命名包中的类)。
  • 包装未密封。
  • 规范和实现标题、版本和供应商未指定。
  • 包上的任何注释都是从上面指定的 package-info.class 读取的。

Package 可以通过 Package.getPackage(String) ClassLoader.getDefinedPackage(String) 方法获得。类加载器定义的每个 Package 都可以通过 Package.getPackages() ClassLoader.getDefinedPackages() 方法获得。

实现注意事项:
内置类加载器 没有为 named modules 中的包明确定义 Package 对象。相反,这些包是自动定义的,没有规范和实现版本控制信息。
Java 虚拟机规范:
5.3 创建和加载
自从:
1.2
参见:
  • 方法详情

    • getName

      public String  getName()
      返回此包的名称。
      返回:
      6.5.3 节中定义的此包的完全限定名称Java 语言规范,例如,java.lang
    • getSpecificationTitle

      public String  getSpecificationTitle()
      返回此包实现的规范的标题。
      返回:
      规范标题 null 如果不知道则返回。
    • getSpecificationVersion

      public String  getSpecificationVersion()
      返回此包实现的规范的版本号。此版本字符串必须是由“.”分隔的非负十进制整数序列,并且可以有前导零。比较版本字符串时,会比较最重要的数字。

      规范版本号使用由句点“.”分隔的非负十进制整数组成的语法,例如“2.0”或“1.2.3.4.5.6.7”。这允许使用可扩展的数字来表示主要、次要、微等版本。版本规范由以下形式语法描述:

      规格版本:
      数字精制版选择
      精制版:
      . 位数
      . 数字精制版
      数字:
      数字
      位数
      数字:
      Character.isDigit(char) 返回 true 的任何字符,例如 0, 1, 2, ...
      返回:
      规范版本,null 如果未知则返回。
    • getSpecificationVendor

      public String  getSpecificationVendor()
      返回拥有和维护实现此包的类的规范的组织、供应商或公司的名称。
      返回:
      规范供应商,null 如果未知则返回。
    • getImplementationTitle

      public String  getImplementationTitle()
      返回这个包的标题。
      返回:
      实现的标题,如果不知道则返回null
    • getImplementationVersion

      public String  getImplementationVersion()
      返回此实现的版本。它由此实现的供应商分配的任何字符串组成,并且不具有 Java 运行时指定或期望的任何特定语法。可以将其与此供应商为此包的此实现使用的其他包版本字符串进行比较以判断是否相等。
      返回:
      实现的版本,null 如果未知则返回。
    • getImplementationVendor

      public String  getImplementationVendor()
      返回实现此包的供应商,如果不知道则返回 null
      返回:
      实施此包的供应商,null 如果未知则返回。
    • isSealed

      public boolean isSealed()
      如果此包是密封的,则返回 true。
      API 注意:
      包装密封密封类或接口 没有关系。包密封特定于为未命名模块中的类定义的 JAR 文件。有关 Package 如何定义为密封封装的详细信息,请参阅 Package 类规范。
      返回:
      如果包装是密封的,则为 true,否则为 false
    • isSealed

      public boolean isSealed(URL  url)
      如果此包相对于指定的代码源 url 是密封的,则返回 true。
      API 注意:
      包装密封密封类或接口 没有关系。包密封特定于为未命名模块中的类定义的 JAR 文件。有关 Package 如何定义为密封封装的详细信息,请参阅 Package 类规范。
      参数:
      url - 代码源 URL
      返回:
      如果此包相对于给定的 url 是密封的,则为真
    • isCompatibleWith

      public boolean isCompatibleWith(String  desired) throws NumberFormatException
      将此包的规范版本与所需版本进行比较。如果此包规范版本号大于或等于所需版本号,则返回 true。

      通过顺序比较所需字符串和规范字符串的相应组件来比较版本号。每个组件都转换为十进制整数,并比较这些值。如果规范值大于所需值,则返回 true。如果该值较小,则返回 false。如果值相等,则跳过周期并比较下一对组件。

      参数:
      desired - 所需版本的版本字符串。
      返回:
      如果此包的版本号大于或等于所需的版本号,则为真
      抛出:
      NumberFormatException - 如果当前版本未知,或者所需版本或当前版本不是正确的点格式。
    • getPackage

      @Deprecated (since ="9") public static   getPackage(String  name)
      已弃用。
      如果多个类加载器相互委托并定义具有相同包名的类,并且一个这样的加载器依赖于 getPackage 的查找行为从父加载器返回一个 Package,那么 Package 公开的属性可能与预期的不同程序的其余部分。例如,Package 只会公开父加载器定义的 package-info.class 文件中的注释,即使子加载器定义的 package-info.class 文件中存在注释。一种更健壮的方法是使用 ClassLoader.getDefinedPackage(java.lang.String) 方法,它为指定的类加载器返回一个 Package
      在调用者的类加载器及其祖先中按名称查找包。

      如果调用者的类加载器定义了给定名称的 Package,则返回 Package。否则,调用者的类加载器的祖先将被递归地(逐父)搜索给定名称的Package

      调用此方法等同于调用 ClassLoader 实例上的 ClassLoader.getPackage(java.lang.String) ,它是调用者的类加载器。

      参数:
      name - 包名称,例如“java.lang”。
      返回:
      由调用者的类加载器或其祖先定义的给定名称的 Package,如果未找到,则为 null
      抛出:
      NullPointerException - 如果 namenull
      参见:
    • getPackages

      public static  [] getPackages()
      返回由调用者的类加载器及其祖先定义的所有 Package 。返回的数组可能包含多个具有相同包名的 Package 对象,每个对象由类加载器层次结构中的不同类加载器定义。

      调用此方法等同于调用 ClassLoader 实例上的 ClassLoader.getPackages() ,它是调用者的类加载器。

      返回:
      此类加载器及其祖先定义的 Package 对象数组
      参见:
    • hashCode

      public int hashCode()
      返回根据包名称计算的哈希码。
      重写:
      hashCode 在类 Object
      返回:
      根据包名称计算的哈希码。
      参见:
    • toString

      public String  toString()
      返回此包的字符串表示形式。它的值是字符串“package”和包名。如果定义了包标题,则会附加它。如果定义了包版本,则会附加它。
      重写:
      toString 在类 Object
      返回:
      包的字符串表示形式。
    • getAnnotation

      public <A extends Annotation > A getAnnotation(Class <A> annotationClass)
      如果此类注解为 present ,则返回此元素针对指定类型的注解,否则为 null。

      请注意,此方法返回的任何注解都是声明注解。

      指定者:
      getAnnotation 在接口 AnnotatedElement
      类型参数:
      A - 要查询并返回(如果存在)的注释类型
      参数:
      annotationClass——注解类型对应的Class对象
      返回:
      如果此元素上存在此元素的指定注解类型的注解,则为 null
      抛出:
      NullPointerException - 如果给定的注释类为 null
      自从:
      1.5
    • isAnnotationPresent

      public boolean isAnnotationPresent(Class <? extends Annotation > annotationClass)
      如果指定类型的注解在此元素上为 present,则返回 true,否则返回 false。此方法主要是为了方便访问标记注释而设计的。

      该方法返回的真值相当于:getAnnotation(annotationClass) != null

      指定者:
      isAnnotationPresent 在接口 AnnotatedElement
      参数:
      annotationClass——注解类型对应的Class对象
      返回:
      如果此元素上存在指定注解类型的注解,则为 true,否则为 false
      抛出:
      NullPointerException - 如果给定的注释类为 null
      自从:
      1.5
    • getAnnotationsByType

      public <A extends Annotation > A[] getAnnotationsByType(Class <A> annotationClass)
      返回带有此元素的 associated 注释。如果这个元素没有注解associated,返回值是一个长度为0的数组。这个方法和AnnotatedElement.getAnnotation(Class) 的区别是这个方法检测它的参数是否是一个repeatable annotation type(JLS 9.6),如果是,则尝试寻找通过“查看”容器注解来查看该类型的一个或多个注释。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。

      请注意,此方法返回的任何注释都是声明注解。

      指定者:
      getAnnotationsByType 在接口 AnnotatedElement
      类型参数:
      A - 要查询并返回(如果存在)的注释类型
      参数:
      annotationClass——注解类型对应的Class对象
      返回:
      如果与此元素相关联,则为指定注解类型的所有此元素的注释,否则为长度为零的数组
      抛出:
      NullPointerException - 如果给定的注释类为 null
      自从:
      1.8
    • getAnnotations

      public Annotation [] getAnnotations()
      返回此元素上的 present 注释。如果该元素上没有注解present,则返回值为长度为0的数组。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。

      请注意,此方法返回的任何注释都是声明注解。

      指定者:
      getAnnotations 在接口 AnnotatedElement
      返回:
      此元素上的注释
      自从:
      1.5
    • getDeclaredAnnotation

      public <A extends Annotation > A getDeclaredAnnotation(Class <A> annotationClass)
      如果此类注解为 directly present ,则返回此元素针对指定类型的注解,否则为 null。此方法忽略继承的注释。 (如果没有注释直接出现在该元素上,则返回 null。)

      请注意,此方法返回的任何注解都是声明注解。

      指定者:
      getDeclaredAnnotation 在接口 AnnotatedElement
      类型参数:
      A - 要查询的注解类型,如果直接存在则返回
      参数:
      annotationClass——注解类型对应的Class对象
      返回:
      如果直接出现在此元素上,则此元素针对指定注解类型的注解,否则为 null
      抛出:
      NullPointerException - 如果给定的注释类为 null
      自从:
      1.8
    • getDeclaredAnnotationsByType

      public <A extends Annotation > A[] getDeclaredAnnotationsByType(Class <A> annotationClass)
      从接口 AnnotatedElement 复制的描述
      如果此类注解是 directly presentindirectly present ,则返回此元素的指定类型的注解。此方法忽略继承的注释。如果没有指定的注解直接或间接出现在这个元素上,返回值是一个长度为0的数组。这个方法和AnnotatedElement.getDeclaredAnnotation(Class) 的区别是这个方法检测它的参数是否是一个repeatable annotation type(JLS 9.6),如果是,尝试通过“查看”容器注解(如果存在)来查找该类型的一个或多个注释。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。
      指定者:
      getDeclaredAnnotationsByType 在接口 AnnotatedElement
      类型参数:
      A - 如果直接或间接存在,要查询并返回的注释类型
      参数:
      annotationClass——注解类型对应的Class对象
      返回:
      如果直接或间接出现在该元素上,则指定注解类型的所有该元素的注释,否则为长度为零的数组
      抛出:
      NullPointerException - 如果给定的注释类为 null
      自从:
      1.8
    • getDeclaredAnnotations

      public Annotation [] getDeclaredAnnotations()
      返回此元素上的 directly present 注释。此方法忽略继承的注释。如果该元素上没有注解directly present,则返回值为长度为0的数组。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。

      请注意,此方法返回的任何注释都是声明注解。

      指定者:
      getDeclaredAnnotations 在接口 AnnotatedElement
      返回:
      注释直接出现在这个元素上
      自从:
      1.5