- 所有已实现的接口:
-
AnnotatedElement
运行时包的注解是从与运行时包中的类相同代码源的package-info.class中读取的。
组成运行时包的类可能实现特定规范。当定义Package时,可以提供规范标题、版本和供应商(指示规范所有者/维护者)信息。应用程序可以通过使用Package.isCompatibleWith(String)方法询问Package是否与特定规范版本兼容。此外,当定义Package时,还可以提供有关实际组成运行时包的类的信息。此信息包括实现标题、版本和供应商(指示类供应商)。
可以使用ClassLoader.definePackage(String, String, String, String, String, String, String, URL)方法显式定义Package。调用者提供规范和实现标题、版本和供应商。调用者还指示包是否已封装。如果在定义运行时包中的类时未显式定义Package,则Package将由类的定义类加载器自动定义,如下所示。
为命名模块中的类自动定义的Package具有以下属性:
- 包的名称是从类的二进制名称派生的。由于命名模块中的类必须位于命名包中,因此派生名称永远不为空。
- 如果已知,包将使用模块位置作为代码源进行封装。
- 规范和实现标题、版本和供应商未指定。
- 包上的任何注解都将从
package-info.class中读取,如上所述。
为无名模块中的类自动定义的Package具有以下属性:
- 包的名称可以是
""(对于无名包中的类)或从类的二进制名称派生的(对于命名包中的类)。 - 包未封装。
- 规范和实现标题、版本和供应商未指定。
- 包上的任何注解都将从
package-info.class中读取,如上所述。
可以使用Package.getPackage(String)和ClassLoader.getDefinedPackage(String)方法获取Package。每个由类加载器定义的Package都可以使用Package.getPackages()和ClassLoader.getDefinedPackages()方法获取。
-
Method Summary
Modifier and TypeMethodDescription<A extends Annotation>
AgetAnnotation(Class<A> annotationClass) 如果指定类型的注解存在,则返回此元素的该类型注解,否则返回null。返回此元素上存在的注解。<A extends Annotation>
A[]getAnnotationsByType(Class<A> annotationClass) 返回与此元素关联的注解。<A extends Annotation>
AgetDeclaredAnnotation(Class<A> annotationClass) 如果指定类型的注解直接存在,则返回此元素的该类型注解,否则返回null。返回此元素上直接存在的注解。<A extends Annotation>
A[]getDeclaredAnnotationsByType(Class<A> annotationClass) 如果指定类型的注解直接存在或间接存在,则返回此元素的该类型注解。返回此包的标题。返回实现此包的供应商,如果未知则返回null。返回此实现的版本。getName()返回此包的名称。static PackagegetPackage(String name) 已弃用。static Package[]返回调用者类加载器及其祖先定义的所有Package。返回此包实现的规范的标题。返回拥有并维护实现此包的类规范的组织、供应商或公司的名称。返回此包实现的规范的版本号。inthashCode()返回从包名称计算的哈希码。booleanisAnnotationPresent(Class<? extends Annotation> annotationClass) 如果指定类型的注解存在于此元素上,则返回true,否则返回false。booleanisCompatibleWith(String desired) 将此包的规范版本与所需版本进行比较。booleanisSealed()如果此包已封装,则返回true。boolean返回此包是否相对于指定的代码源url已封装。toString()返回此包的字符串表示形式。
-
Method Details
-
getName
返回此包的名称。- 返回:
-
在Java语言规范第6.5.3节中定义的此包的完全限定名称,例如,
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
返回true如果此包相对于指定的代码源url已封装。 -
isCompatibleWith
比较此包的规范版本与所需版本。如果此包的规范版本号大于或等于所需版本号,则返回true。版本号通过按顺序比较所需和规范字符串的对应组件来比较。每个组件都转换为十进制整数并进行比较。如果规范值大于所需值,则返回true。如果值较小,则返回false。如果值相等,则跳过句点并比较下一对组件。
- 参数:
-
desired- 所需版本的版本字符串。 - 返回:
- 如果此包的版本号大于或等于所需版本号,则返回true
- 抛出:
-
NumberFormatException- 如果当前版本未知或所需版本或当前版本不是正确的点分形式。
-
getPackage
Deprecated.If multiple class loaders delegate to each other and define classes with the same package name, and one such loader relies on the lookup behavior ofgetPackageto return aPackagefrom a parent loader, then the properties exposed by thePackagemay not be as expected in the rest of the program. For example, thePackagewill only expose annotations from thepackage-info.classfile defined by the parent loader, even if annotations exist in apackage-info.classfile defined by a child loader. A more robust approach is to use theClassLoader.getDefinedPackage(java.lang.String)method which returns aPackagefor the specified class loader.在调用者的类加载器及其祖先中按名称查找包。如果调用者的类加载器定义了给定名称的
Package,则返回Package。否则,递归搜索调用者的类加载器的祖先(逐级父级)以查找给定名称的Package。调用此方法等效于在调用者的类加载器上调用
ClassLoader.getPackage(java.lang.String)。- 参数:
-
name- 包名称,例如 "java.lang" - 返回:
-
被调用者的类加载器或其祖先定义的给定名称的
Package,如果未找到则返回null - 抛出:
-
NullPointerException- 如果name为null - 另请参阅:
-
getPackages
返回由调用者的类加载器及其祖先定义的所有Package。返回的数组可能包含同一包名称的多个Package对象,每个由类加载器层次结构中的不同类加载器定义。调用此方法等效于在调用者的类加载器上调用
ClassLoader.getPackages()。- 返回:
-
由此类加载器及其祖先定义的
Package对象数组 - 另请参阅:
-
hashCode
public int hashCode()返回从包名称计算的哈希码。 -
toString
返回此包的字符串表示形式。其值为字符串 "package " 和包名称。如果定义了包标题,则会附加。如果定义了包版本,则会附加。 -
getAnnotation
如果指定类型的注释存在,则返回此元素的注释,否则返回null。请注意,此方法返回的任何注释都是声明注释。
- 指定者:
-
getAnnotation在接口AnnotatedElement中 - 类型参数:
-
A- 要查询并返回的注释类型 - 参数:
-
annotationClass- 对应于注释类型的Class对象 - 返回:
- 如果此元素上存在指定注释类型的注释,则返回此元素的注释,否则返回null
- 抛出:
-
NullPointerException- 如果给定的注释类为null - 自:
- 1.5
-
isAnnotationPresent
如果指定类型的注释存在于此元素上,则返回true,否则返回false。此方法主要设计用于方便访问标记注释。此方法返回的真值等同于:
getAnnotation(annotationClass) != null- 指定者:
-
isAnnotationPresent在接口AnnotatedElement中 - 参数:
-
annotationClass- 对应于注释类型的Class对象 - 返回:
- 如果此元素上存在指定注释类型的注释,则返回true,否则返回false
- 抛出:
-
NullPointerException- 如果给定的注释类为null - 自:
- 1.5
-
getAnnotationsByType
返回与此元素关联的注释。如果没有与此元素关联的注释,则返回值为长度为0的数组。此方法与AnnotatedElement.getAnnotation(Class)的区别在于,此方法检测其参数是否为可重复注释类型(JLS 9.6),如果是,则尝试通过“查看”容器注释来查找一个或多个该类型的注释。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。请注意,此方法返回的任何注释都是声明注释。
- 指定者:
-
getAnnotationsByType在接口AnnotatedElement中 - 类型参数:
-
A- 要查询并返回的注释类型 - 参数:
-
annotationClass- 对应于注释类型的Class对象 - 返回:
- 如果与此元素关联的注释为指定的注释类型,则返回所有此元素的注释,否则返回长度为零的数组
- 抛出:
-
NullPointerException- 如果给定的注释类为null - 自:
- 1.8
-
getAnnotations
返回此元素上存在的注释。如果此元素上没有注释,则返回值为长度为0的数组。调用此方法的调用者可以修改返回的数组;这不会影响返回给其他调用者的数组。请注意,此方法返回的任何注释都是声明注释。
- 指定者:
-
getAnnotations在接口AnnotatedElement中 - 返回:
- 此元素上存在的注释
- 自:
- 1.5
-
getDeclaredAnnotation
如果直接存在指定类型的注释,则返回此元素的注释,否则返回null。此方法会忽略继承的注释。(如果此元素上没有直接存在的注释,则返回null。)请注意,此方法返回的任何注释都是声明注释。
- 指定者:
-
getDeclaredAnnotation在接口AnnotatedElement中 - 类型参数:
-
A- 要查询并返回的直接存在的注释类型 - 参数:
-
annotationClass- 对应于注释类型的Class对象 - 返回:
- 如果此元素上直接存在指定注释类型的注释,则返回此元素的注释,否则返回null
- 抛出:
-
NullPointerException- 如果给定的注释类为null - 自:
- 1.8
-
getDeclaredAnnotationsByType
从接口复制的描述:AnnotatedElement返回指定类型的此元素的注解(如果这些注解是直接存在或间接存在)。此方法忽略继承的注解。如果在此元素上没有直接或间接存在的指定注解,则返回值是长度为0的数组。此方法与AnnotatedElement.getDeclaredAnnotation(Class)方法的区别在于,此方法检测其参数是否为可重复注解类型(JLS 9.6),如果是,则尝试通过“查找”容器注解来找到一个或多个该类型的注解。调用此方法的调用者可以修改返回的数组;这不会对返回给其他调用者的数组产生影响。- 指定者:
-
getDeclaredAnnotationsByType在接口AnnotatedElement - 类型参数:
-
A- 要查询并返回的注解类型 - 参数:
-
annotationClass- 对应于注解类型的Class对象 - 返回:
- 如果直接或间接存在于此元素上的指定注解类型的所有注解,否则为长度为零的数组
- 抛出:
-
NullPointerException- 如果给定的注解类为null - 自版本:
- 1.8
-
getDeclaredAnnotations
返回此元素上直接存在的注解。此方法忽略继承的注解。如果此元素上没有直接存在的注解,则返回值为长度为0的数组。调用此方法的调用者可以修改返回的数组;这不会对返回给其他调用者的数组产生影响。请注意,此方法返回的任何注解都是声明注解。
- 指定者:
-
getDeclaredAnnotations在接口AnnotatedElement - 返回:
- 此元素上直接存在的注解
- 自版本:
- 1.5
-
getPackage的查找行为从父加载器返回Package,则Package公开的属性在程序的其余部分可能不如预期。