- 所有已实现的接口:
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() 方法获得。
-
方法总结
修饰符和类型方法描述<A extends Annotation>
AgetAnnotation(Class<A> annotationClass) 如果此类注解为 present ,则返回此元素针对指定类型的注解,否则为 null。返回此元素上的 present 注释。<A extends Annotation>
A[]getAnnotationsByType(Class<A> annotationClass) 返回带有此元素的 associated 注释。<A extends Annotation>
AgetDeclaredAnnotation(Class<A> annotationClass) 如果此类注解为 directly present ,则返回此元素针对指定类型的注解,否则为 null。返回此元素上的 directly present 注释。<A extends Annotation>
A[]getDeclaredAnnotationsByType(Class<A> annotationClass) 如果此类注解是 directly present 或 indirectly present ,则返回此元素的指定类型的注解。返回这个包的标题。返回实现此包的供应商,如果不知道则返回null。返回此实现的版本。getName()返回此包的名称。static PackagegetPackage(String name) 已弃用。static Package[]返回由调用者的类加载器及其祖先定义的所有Package。返回此包实现的规范的标题。返回拥有和维护实现此包的类的规范的组织、供应商或公司的名称。返回此包实现的规范的版本号。inthashCode()返回根据包名称计算的哈希码。booleanisAnnotationPresent(Class<? extends Annotation> annotationClass) 如果指定类型的注解在此元素上为 present,则返回 true,否则返回 false。booleanisCompatibleWith(String desired) 将此包的规范版本与所需版本进行比较。booleanisSealed()如果此包是密封的,则返回 true。boolean如果此包相对于指定的代码源url是密封的,则返回 true。toString()返回此包的字符串表示形式。
-
方法详情
-
getName
返回此包的名称。- 返回:
-
在 6.5.3 节中定义的此包的完全限定名称Java 语言规范,例如,
java.lang
-
getSpecificationTitle
返回此包实现的规范的标题。- 返回:
-
规范标题
null如果不知道则返回。
-
getSpecificationVersion
返回此包实现的规范的版本号。此版本字符串必须是由“.”分隔的非负十进制整数序列,并且可以有前导零。比较版本字符串时,会比较最重要的数字。规范版本号使用由句点“.”分隔的非负十进制整数组成的语法,例如“2.0”或“1.2.3.4.5.6.7”。这允许使用可扩展的数字来表示主要、次要、微等版本。版本规范由以下形式语法描述:
- 规格版本:
- 数字精制版选择
- 精制版:
.位数.数字精制版- 数字:
- 数字
- 位数
- 数字:
Character.isDigit(char)返回true的任何字符,例如 0, 1, 2, ...
- 返回:
-
规范版本,
null如果未知则返回。
-
getSpecificationVendor
返回拥有和维护实现此包的类的规范的组织、供应商或公司的名称。- 返回:
-
规范供应商,
null如果未知则返回。
-
getImplementationTitle
返回这个包的标题。- 返回:
-
实现的标题,如果不知道则返回
null。
-
getImplementationVersion
返回此实现的版本。它由此实现的供应商分配的任何字符串组成,并且不具有 Java 运行时指定或期望的任何特定语法。可以将其与此供应商为此包的此实现使用的其他包版本字符串进行比较以判断是否相等。- 返回:
-
实现的版本,
null如果未知则返回。
-
getImplementationVendor
返回实现此包的供应商,如果不知道则返回null。- 返回:
-
实施此包的供应商,
null如果未知则返回。
-
isSealed
public boolean isSealed()如果此包是密封的,则返回 true。 -
isSealed
如果此包相对于指定的代码源url是密封的,则返回 true。 -
isCompatibleWith
将此包的规范版本与所需版本进行比较。如果此包规范版本号大于或等于所需版本号,则返回 true。通过顺序比较所需字符串和规范字符串的相应组件来比较版本号。每个组件都转换为十进制整数,并比较这些值。如果规范值大于所需值,则返回 true。如果该值较小,则返回 false。如果值相等,则跳过周期并比较下一对组件。
- 参数:
desired- 所需版本的版本字符串。- 返回:
- 如果此包的版本号大于或等于所需的版本号,则为真
- 抛出:
NumberFormatException- 如果当前版本未知,或者所需版本或当前版本不是正确的点格式。
-
getPackage
已弃用。如果多个类加载器相互委托并定义具有相同包名的类,并且一个这样的加载器依赖于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- 如果name是null。- 参见:
-
getPackages
返回由调用者的类加载器及其祖先定义的所有Package。返回的数组可能包含多个具有相同包名的Package对象,每个对象由类加载器层次结构中的不同类加载器定义。调用此方法等同于调用
ClassLoader实例上的ClassLoader.getPackages(),它是调用者的类加载器。- 返回:
-
此类加载器及其祖先定义的
Package对象数组 - 参见:
-
hashCode
public int hashCode()返回根据包名称计算的哈希码。 -
toString
返回此包的字符串表示形式。它的值是字符串“package”和包名。如果定义了包标题,则会附加它。如果定义了包版本,则会附加它。 -
getAnnotation
如果此类注解为 present ,则返回此元素针对指定类型的注解,否则为 null。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
getAnnotation在接口AnnotatedElement中- 类型参数:
A- 要查询并返回(如果存在)的注释类型- 参数:
annotationClass——注解类型对应的Class对象- 返回:
- 如果此元素上存在此元素的指定注解类型的注解,则为 null
- 抛出:
NullPointerException- 如果给定的注释类为 null- 自从:
- 1.5
-
isAnnotationPresent
如果指定类型的注解在此元素上为 present,则返回 true,否则返回 false。此方法主要是为了方便访问标记注释而设计的。该方法返回的真值相当于:
getAnnotation(annotationClass) != null- 指定者:
isAnnotationPresent在接口AnnotatedElement中- 参数:
annotationClass——注解类型对应的Class对象- 返回:
- 如果此元素上存在指定注解类型的注解,则为 true,否则为 false
- 抛出:
NullPointerException- 如果给定的注释类为 null- 自从:
- 1.5
-
getAnnotationsByType
返回带有此元素的 associated 注释。如果这个元素没有注解associated,返回值是一个长度为0的数组。这个方法和AnnotatedElement.getAnnotation(Class)的区别是这个方法检测它的参数是否是一个repeatable annotation type(JLS 9.6),如果是,则尝试寻找通过“查看”容器注解来查看该类型的一个或多个注释。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。请注意,此方法返回的任何注释都是声明注解。
- 指定者:
getAnnotationsByType在接口AnnotatedElement中- 类型参数:
A- 要查询并返回(如果存在)的注释类型- 参数:
annotationClass——注解类型对应的Class对象- 返回:
- 如果与此元素相关联,则为指定注解类型的所有此元素的注释,否则为长度为零的数组
- 抛出:
NullPointerException- 如果给定的注释类为 null- 自从:
- 1.8
-
getAnnotations
返回此元素上的 present 注释。如果该元素上没有注解present,则返回值为长度为0的数组。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。请注意,此方法返回的任何注释都是声明注解。
- 指定者:
getAnnotations在接口AnnotatedElement中- 返回:
- 此元素上的注释
- 自从:
- 1.5
-
getDeclaredAnnotation
如果此类注解为 directly present ,则返回此元素针对指定类型的注解,否则为 null。此方法忽略继承的注释。 (如果没有注释直接出现在该元素上,则返回 null。)请注意,此方法返回的任何注解都是声明注解。
- 指定者:
getDeclaredAnnotation在接口AnnotatedElement中- 类型参数:
A- 要查询的注解类型,如果直接存在则返回- 参数:
annotationClass——注解类型对应的Class对象- 返回:
- 如果直接出现在此元素上,则此元素针对指定注解类型的注解,否则为 null
- 抛出:
NullPointerException- 如果给定的注释类为 null- 自从:
- 1.8
-
getDeclaredAnnotationsByType
从接口AnnotatedElement复制的描述如果此类注解是 directly present 或 indirectly present ,则返回此元素的指定类型的注解。此方法忽略继承的注释。如果没有指定的注解直接或间接出现在这个元素上,返回值是一个长度为0的数组。这个方法和AnnotatedElement.getDeclaredAnnotation(Class)的区别是这个方法检测它的参数是否是一个repeatable annotation type(JLS 9.6),如果是,尝试通过“查看”容器注解(如果存在)来查找该类型的一个或多个注释。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。- 指定者:
getDeclaredAnnotationsByType在接口AnnotatedElement中- 类型参数:
A- 如果直接或间接存在,要查询并返回的注释类型- 参数:
annotationClass——注解类型对应的Class对象- 返回:
- 如果直接或间接出现在该元素上,则指定注解类型的所有该元素的注释,否则为长度为零的数组
- 抛出:
NullPointerException- 如果给定的注释类为 null- 自从:
- 1.8
-
getDeclaredAnnotations
返回此元素上的 directly present 注释。此方法忽略继承的注释。如果该元素上没有注解directly present,则返回值为长度为0的数组。该方法的调用者可以自由修改返回的数组;它不会影响返回给其他调用者的数组。请注意,此方法返回的任何注释都是声明注解。
- 指定者:
getDeclaredAnnotations在接口AnnotatedElement中- 返回:
- 注释直接出现在这个元素上
- 自从:
- 1.5
-
getPackage的查找行为从父加载器返回一个Package,那么Package公开的属性可能与预期的不同程序的其余部分。