Package
java.lang.Object
|—java.lang.Package
public class Package
extends Object
implements AnnotatedElement
包对象包含有关 Java 包的实现和规范的版本信息。 此版本信息由加载类的 ClassLoader 实例检索并提供。 通常,它存储在与类一起分发的清单中。
组成包的类集可以实现特定的规范,如果是这样,规范标题、版本号和供应商字符串标识该规范。 应用程序可以询问包是否与特定版本兼容,有关详细信息,请参阅 isCompatibleWith 方法。
规范版本号使用由句点“.”分隔的非负十进制整数组成的语法,例如“2.0”或“1.2.3.4.5.6.7”。 这允许使用可扩展的数字来表示主要、次要、微型等版本。 版本规范由以下形式语法描述:
规格版本:
Digits RefinedVersionopt
精炼版:
. Digits
. Digits RefinedVersion
Digits:
Digit
Digits
Digit:
Character#isDigit 返回 true 的任何字符,例如 0, 1, 2, …
实现标题、版本和供应商字符串标识了一个实现,并且可以方便地使用,以便在发生问题时准确报告所涉及的包。 所有三个实现字符串的内容都是特定于供应商的。 实现版本字符串没有指定的语法,只应与所需的版本标识符比较是否相等。
在每个 ClassLoader 实例中,来自同一个 java 包的所有类都具有相同的 Package 对象。 静态方法允许通过名称或当前类加载器已知的所有包的集合找到包。
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
<A extends Annotation>A | getAnnotation(Class<A> annotationClass) | 如果存在这样的注释,则返回此元素的指定类型的注释,否则返回 null。 |
Annotation[] | getAnnotations() | 返回此元素上存在的注释。 |
<A extends Annotation>A[] | getAnnotationsByType(Class<A> annotationClass) | 返回与此元素关联的注释。 |
<A extends Annotation>A | getDeclaredAnnotation(Class<A> annotationClass) | 如果直接存在这样的注释,则返回此元素的指定类型的注释,否则返回 null。 |
Annotation[] | getDeclaredAnnotations() | 返回此元素上直接存在的注释。 |
<A extends Annotation>A[] | getDeclaredAnnotationsByType(Class<A> annotationClass) | 如果此类注释直接存在或间接存在,则返回指定类型的此元素的注释。 |
String | getImplementationTitle() | 返回此包的标题。 |
String | getImplementationVendor() | 返回提供此实现的组织、供应商或公司的名称。 |
String | getImplementationVersion() | 返回此实现的版本。 |
String | getName() | 返回此包的名称。 |
static Package | getPackage(String name) | 在调用者 ClassLoader 实例中按名称查找包。 |
static Package[] | getPackages() | 获取调用者的 ClassLoader 实例当前已知的所有包。 |
String | getSpecificationTitle() | 返回此包实现的规范的标题。 |
String | getSpecificationVendor() | 返回拥有并维护实现此包的类规范的组织、供应商或公司的名称。 |
String | getSpecificationVersion() | 返回此包实现的规范的版本号。 |
int | hashCode() | 返回根据包名称计算的哈希码。 |
boolean | isAnnotationPresent(Class<? extends Annotation> annotationClass) | 如果此元素上存在指定类型的注释,则返回 true,否则返回 false。 |
boolean | isCompatibleWith(String desired) | 将此包的规格版本与所需版本进行比较。 |
boolean | isSealed() | 如果此包已密封,则返回 true。 |
boolean | isSealed(URL url) | 如果此包相对于指定的代码源 url 是密封的,则返回 true。 |
String | toString() | 返回此包的字符串表示形式。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait |
方法详情
getName
public String getName()
返回此包的名称。
返回:
《The Java™ Language Specification》第 6.5.3 节中定义的该包的完全限定名称,例如 java.lang
getSpecificationTitle
public String getSpecificationTitle()
返回此包实现的规范的标题。
返回:
规范标题,如果不知道则返回null。
getSpecificationVersion
public String getSpecificationVersion()
返回此包实现的规范的版本号。 此版本字符串必须是由“.”分隔的非负十进制整数序列,并且可能有前导零。 当比较版本字符串时,比较最重要的数字。
返回:
规范版本,如果不知道则返回null。
getSpecificationVendor
public String getSpecificationVendor()
返回拥有并维护实现此包的类规范的组织、供应商或公司的名称。
返回:
规范供应商,如果未知则返回 null。
getImplementationTitle
public String getImplementationTitle()
返回此包的标题。
返回:
实现的标题,如果不知道则返回null。
getImplementationVersion
public String getImplementationVersion()
返回此实现的版本。 它由此实现的供应商分配的任何字符串组成,并且没有 Java 运行时指定或期望的任何特定语法。 它可以与此供应商为此包用于此实现的其他包版本字符串进行比较是否相等。
返回:
实现的版本,如果不知道则返回null。
getImplementationVendor
public String getImplementationVendor()
返回提供此实现的组织、供应商或公司的名称。
返回:
实施此软件包的供应商。
isSealed
public boolean isSealed()
如果此包已密封,则返回 true。
返回:
如果包裹是密封的,则为 true,否则为 false。
isSealed
public boolean isSealed(URL url)
如果此包相对于指定的代码源 url 是密封的,则返回 true。
参数:
参数名称 | 参数描述 |
---|---|
url | 代码源地址 |
返回:
如果此包相对于 url 是密封的,则为 true
isCompatibleWith
public boolean isCompatibleWith(String desired) throws NumberFormatException
将此包的规格版本与所需版本进行比较。 如果此包规范版本号大于或等于所需的版本号,则返回 true。
通过顺序比较期望字符串和规范字符串的相应组件来比较版本号。 每个组件都转换为十进制整数并比较值。 如果规范值大于期望值,则返回 true。 如果值小于 false 则返回。 如果值相等,则跳过周期并比较下一对分量。
参数:
参数名称 | 参数描述 |
---|---|
desired | 所需版本的版本字符串。 |
返回:
如果此包的版本号大于或等于所需的版本号,则为 true
Throws:
Throw名称 | Throw描述 |
---|---|
NumberFormatException | 如果所需或当前版本不是正确的虚线形式。 |
getPackage
public static Package getPackage(String name)
在调用者 ClassLoader 实例中按名称查找包。 调用者 ClassLoader 实例用于查找与命名类对应的包实例。 如果调用者 ClassLoader 实例为空,则搜索由系统 ClassLoader 实例加载的包集以查找命名包。
仅当类加载器创建具有适当属性的包实例时,包才具有版本和规范的属性。 通常,这些属性在伴随类的清单中定义。
参数:
参数名称 | 参数描述 |
---|---|
name | 包名,例如 java.lang。 |
返回:
请求名称的包。 如果存档或代码库中没有可用的包信息,则它可能为 null。
getPackages
public static Package[] getPackages()
获取调用者的 ClassLoader 实例当前已知的所有包。 这些包对应于通过该 ClassLoader 实例加载或按名称可访问的类。 如果调用者的ClassLoader实例是bootstrap ClassLoader实例,在某些实现中可能用null表示,则只会返回bootstrap ClassLoader实例加载的类对应的包。
返回:
调用者 ClassLoader 实例已知的新包数组。 如果不知道,则返回零长度数组。
hashCode
public int hashCode()
返回根据包名称计算的哈希码。
覆盖:
类 Object 中的 hashCode
返回:
从包名称计算的哈希码。
toString
public String toString()
返回此包的字符串表示形式。 它的值是字符串“package”和包名。 如果定义了包标题,则会附加它。 如果定义了包版本,则附加它。
覆盖:
类 Object 中的 toString
返回:
包的字符串表示形式。
getAnnotation
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
从接口复制的描述:AnnotatedElement
如果存在这样的注释,则返回此元素的指定类型的注释,否则返回 null。
指定者:
接口 AnnotatedElement 中的 getAnnotation
类型参数:
类型参数名称 | 类型参数描述 |
---|---|
A | 要查询并返回的注释类型(如果存在) |
参数:
参数名称 | 参数描述 |
---|---|
annotationClass | 注解类型对应的Class对象 |
返回:
此元素的指定注释类型的注释(如果存在于此元素上),否则为 null
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果给定的注释类为空 |
isAnnotationPresent
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
如果此元素上存在指定类型的注释,则返回 true,否则返回 false。 此方法主要是为了方便访问标记注释而设计的。
该方法返回的真值等价于:getAnnotation(annotationClass) != null
默认方法的主体被指定为上面的代码。
指定者:
接口 AnnotatedElement 中的 isAnnotationPresent
参数:
参数名称 | 参数描述 |
---|---|
annotationClass | 注解类型对应的Class对象 |
返回:
如果此元素上存在指定注释类型的注释,则为 true,否则为 false
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | if the given annotation class is null |
getAnnotationsByType
public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass)
从接口复制的描述:AnnotatedElement
返回与此元素关联的注释。 如果没有与该元素关联的注解,则返回值为长度为 0 的数组。该方法与 AnnotatedElement.getAnnotation(java.lang.Class) 的区别在于该方法检测其参数是否为可重复的注解类型( JLS 9.6),如果是这样,则尝试通过“查看”容器注释来查找该类型的一个或多个注释。 该方法的调用者可以随意修改返回的数组; 它不会影响返回给其他调用者的数组。
指定者:
接口 AnnotatedElement 中的 getAnnotationsByType
类型参数:
类型参数名称 | 类型参数描述 |
---|---|
A | 要查询并返回的注释类型(如果存在) |
参数:
参数名称 | 参数描述 |
---|---|
annotationClass | 注解类型对应的Class对象 |
返回:
如果与此元素相关联,则指定注释类型的所有此元素的注释,否则为长度为零的数组
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果给定的注释类为空 |
getAnnotations
public Annotation[] getAnnotations()
从接口复制的描述:AnnotatedElement
返回此元素上存在的注释。 如果此元素上没有注释,则返回值为长度为 0 的数组。此方法的调用者可以自由修改返回的数组; 它不会影响返回给其他调用者的数组。
指定者:
接口 AnnotatedElement 中的 getAnnotations
返回:
此元素上存在的注释
getDeclaredAnnotation
public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass)
从接口复制的描述:AnnotatedElement
如果直接存在这样的注释,则返回此元素的指定类型的注释,否则返回 null。 此方法忽略继承的注释。 (如果此元素上没有直接存在注释,则返回 null。)
指定者:
接口 AnnotatedElement 中的 getDeclaredAnnotation
类型参数:
类型参数名称 | 类型参数描述 |
---|---|
A | 要查询并返回的注释类型(如果直接存在) |
参数:
参数名称 | 参数描述 |
---|---|
annotationClass | 注解类型对应的Class对象 |
返回:
如果直接存在于此元素上,则此元素的指定注释类型的注释,否则为 null
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果给定的注释类为空 |
getDeclaredAnnotationsByType
public <A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass)
从接口复制的描述:AnnotatedElement
如果此类注释直接存在或间接存在,则返回指定类型的此元素的注释。 此方法忽略继承的注释。 如果此元素上没有直接或间接存在指定的注解,则返回值为长度为 0 的数组。此方法与 AnnotatedElement.getDeclaredAnnotation(java.lang.Class) 的区别在于该方法检测其参数是否为 可重复的注释类型(JLS 9.6),如果是这样,则尝试通过“查看”容器注释来查找该类型的一个或多个注释(如果存在)。 该方法的调用者可以随意修改返回的数组; 它不会影响返回给其他调用者的数组。
指定者:
接口 AnnotatedElement 中的 getDeclaredAnnotationsByType
类型参数:
类型参数名称 | 类型参数描述 |
---|---|
A | 如果直接或间接存在,则要查询和返回的注释类型 |
参数:
参数名称 | 参数描述 |
---|---|
annotationClass | 注解类型对应的Class对象 |
返回:
如果直接或间接存在于此元素上,则指定注释类型的所有此元素的注释,否则长度为零的数组
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果给定的注释类为空 |
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
从接口复制的描述:AnnotatedElement
返回此元素上直接存在的注释。 此方法忽略继承的注释。 如果此元素上没有直接存在注释,则返回值为长度为 0 的数组。此方法的调用者可以自由修改返回的数组; 它不会影响返回给其他调用者的数组。
指定者:
接口 AnnotatedElement 中的 getDeclaredAnnotations
返回:
直接出现在此元素上的注释