- java.lang.Object
-
- java.lang.Package
-
- 实现的所有接口
-
AnnotatedElement
public class 软件包extends Objectimplements AnnotatedElement
表示与类加载器关联的运行时包的元数据。 元数据包括注释,版本控制和密封。运行时包的注释在
package-info.class
中与运行时包中的类在相同的代码源中读取。组成运行时包的类集可以实现特定的规范。 定义
软件包
时,可以提供规范标题,版本和供应商(表明规范的所有者/维护者)。 应用程序可以使用Package.isCompatibleWith(String)
方法询问软件包
是否与特定规格版本兼容。 此外,在定义Package时,可以提供有关构成运行时包的实际类的信息。 此信息由实现标题,版本和供应商(指示类的供应商)组成。甲
软件包
可与明确定义ClassLoader.definePackage(String, String, String, String, String, String, String, URL)
方法。 呼叫者提供规范和实现标题,版本和供应商。 呼叫者还指示包是否为sealed 。 如果软件包
没有明确的运行包定义在运行时包中的类定义时,则软件包
自动地被类的定义类加载器定义,如下所示。为命名模块中的类自动定义的
软件包
具有以下属性:- 包的名称源自类的binary names 。 由于命名模块中的类必须位于命名包中,因此派生名称永远不会为空。
- 如果已知,则使用module location作为代码源密封封装。
- 未指定规范和实现标题,版本和供应商。
- 包装上的任何注释都是从
package-info.class
读取的,如上所述。
为未命名模块中的类自动定义的
软件包
具有以下属性:- 包的名称是
""
(对于未命名包中的类)或从类的binary names派生(对于命名包中的类)。 - 包装没有密封。
- 未指定规范和实现标题,版本和供应商。
- 包装上的任何注释都是从
package-info.class
读取的,如上所述。
甲
软件包
可以与获得Package.getPackage(String)
种ClassLoader.getDefinedPackage(String)
方法。 由类加载器定义的每个软件包
都可以使用Package.getPackages()
和ClassLoader.getDefinedPackages()
方法获得。- Implementation Note:
- builtin class loaders没有为命名模块中的包显式定义
软件包
对象。 相反,这些包是自动定义的,没有规范和实现版本控制信息。 - 从以下版本开始:
- 1.2
- 另请参见:
- The JAR File Specification: Package Sealing ,
ClassLoader.definePackage(String, String, String, String, String, String, String, URL)
- See The Java™ Virtual Machine Specification:
- 5.3运行时包
-
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 弃用的方法 变量和类型 方法 描述 <A extends Annotation>
AgetAnnotation(类<A> annotationClass)
返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。Annotation[]
getAnnotations()
返回此元素上 存在的注释。<A extends Annotation>
A[]getAnnotationsByType(类<A> annotationClass)
返回与此元素 关联的注释。<A extends Annotation>
AgetDeclaredAnnotation(类<A> annotationClass)
如果 直接存在这样的注释,则返回指定类型的此元素的注释,否则返回null。Annotation[]
getDeclaredAnnotations()
返回 直接出现在此元素上的注释。<A extends Annotation>
A[]getDeclaredAnnotationsByType(类<A> annotationClass)
如果此类注释 直接存在或 间接存在 ,则返回指定类型的此元素的注释。String
getImplementationTitle()
返回此包的标题。String
getImplementationVendor()
返回实现此包的供应商,如果null
则返回null
。String
getImplementationVersion()
返回此实现的版本。String
getName()
返回此包的名称。static 软件包
getPackage(String name)
已过时。如果多个类加载器相互委托并定义具有相同包名的类,并且一个这样的加载器依赖于getPackage
的查找行为从父加载器返回软件包
,那么软件包
公开的属性可能不是预期的该计划的其余部分。static 软件包[]
getPackages()
返回调用者的类加载器及其祖先定义的所有软件包
。String
getSpecificationTitle()
返回此包实现的规范的标题。String
getSpecificationVendor()
返回拥有并维护实现此包的类的规范的组织,供应商或公司的名称。String
getSpecificationVersion()
返回此包实现的规范的版本号。int
hashCode()
返回从包名称计算的哈希码。boolean
isAnnotationPresent(类<? extends Annotation> annotationClass)
如果此元素上 存在指定类型的注释,则返回true,否则返回false。boolean
isCompatibleWith(String desired)
将此软件包的规范版本与所需版本进行比较。boolean
isSealed()
如果此包已密封,则返回true。boolean
isSealed(URL url)
如果此包相对于指定的代码源url
密封,则返回true。String
toString()
返回此Package的字符串表示形式。
-
-
-
方法详细信息
-
getName
public String getName()
返回此包的名称。- 结果
- The Java™ Language Specification的 6.5.3节中定义的此包的完全限定名称,例如,
java.lang
-
getSpecificationTitle
public String getSpecificationTitle()
返回此包实现的规范的标题。- 结果
- 如果不知道,则返回规范标题
null
。
-
getSpecificationVersion
public String getSpecificationVersion()
返回此包实现的规范的版本号。 此版本字符串必须是由“。”分隔的非负十进制整数序列,并且可能具有前导零。 比较版本字符串时,会比较最重要的数字。规范版本号使用由句号“。”分隔的非负十进制整数组成的语法,例如“2.0”或“1.2.3.4.5.6.7”。 这允许可扩展数字用于表示主要,次要,微等版本。 版本规范由以下正式语法描述:
- SpecificationVersion:
- Digits RefinedVersionopt
- RefinedVersion:
-
.
Digits -
.
Digits RefinedVersion - Digits:
- Digit
- Digits
- Digit:
- any character for which
Character.isDigit(char)
returnstrue
, e.g. 0, 1, 2, ...
- 结果
- 如果
null
则返回规范版本null
。
-
getSpecificationVendor
public String getSpecificationVendor()
返回拥有并维护实现此包的类的规范的组织,供应商或公司的名称。- 结果
- 如果不知道规范供应商,则返回
null
。
-
getImplementationTitle
public String getImplementationTitle()
返回此包的标题。- 结果
- 如果不知道,则返回
null
的实现标题。
-
getImplementationVersion
public String getImplementationVersion()
返回此实现的版本。 它由此实现的供应商分配的任何字符串组成,并且没有Java运行时指定或期望的任何特定语法。 可以将此供应商针对此包用于此实现的其他包版本字符串进行相等性比较。- 结果
- 如果不知道,则返回
null
的实现版本。
-
getImplementationVendor
public String getImplementationVendor()
返回实现此包的供应商,如果null
则返回null
。- 结果
- 实现此程序包的供应商,如果不知道,则返回
null
。
-
isSealed
public boolean isSealed()
如果此包已密封,则返回true。- 结果
- 如果包装是密封的,则为true,否则为false
-
isSealed
public boolean isSealed(URL url)
如果此包相对于指定的代码源url
密封,则返回true。- 参数
-
url
- 代码源URL - 结果
- 如果此包装相对于给定的
url
密封,url
-
isCompatibleWith
public boolean isCompatibleWith(String desired) throws NumberFormatException
将此软件包的规范版本与所需版本进行比较。 如果此包规范版本号大于或等于所需的版本号,则返回true。通过顺序地比较期望和规范字符串的相应组件来比较版本号。 每个组件都转换为十进制整数并比较值。 如果规范值大于期望值,则返回true。 如果值小于false则返回。 如果值相等,则跳过周期并比较下一对组件。
- 参数
-
desired
- 所需版本的版本字符串。 - 结果
- 如果此程序包的版本号大于或等于所需的版本号,则为true
- 异常
-
NumberFormatException
- 如果当前版本未知或所需或当前版本的格式不正确。
-
getPackage
@Deprecated(since="9")public static 软件包 getPackage(String name)
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 ofgetPackage
to return a软件包
from a parent loader, then the properties exposed by the软件包
may not be as expected in the rest of the program. For example, the软件包
will only expose annotations from thepackage-info.class
file defined by the parent loader, even if annotations exist in apackage-info.class
file defined by a child loader. A more robust approach is to use theClassLoader.getDefinedPackage(java.lang.String)
method which returns a软件包
for the specified class loader.在调用者的类加载器及其祖先中按名称查找包。如果调用者的类加载器定义
软件包
给定的名称,该软件包
返回。 否则,软件包
递归方式(父对象)查找给定名称的软件包
来调用调用者类加载器的祖先。调用此方法相当于在
ClassLoader
实例上调用ClassLoader.getPackage(java.lang.String)
,该实例是调用者的类加载器。- 参数
-
name
- 包名称,例如“java.lang
”。 - 结果
- 该
软件包
通过调用者的类加载器或其祖先,或定义的给定名称null
如果没有找到。 - 异常
-
NullPointerException
- 如果name
是null
。 - 另请参见:
-
ClassLoader.getDefinedPackage(java.lang.String)
-
getPackages
public static 软件包[] getPackages()
返回调用者的类加载器及其祖先定义的所有软件包
。 返回的数组可能包含多个具有相同包名称的软件包
对象,每个对象都由类加载器层次结构中的不同类加载器定义。调用此方法相当于在
ClassLoader
实例上调用ClassLoader.getPackages()
,该实例是调用者的类加载器。- 结果
- 由此类加载器及其祖先定义的
软件包
对象的数组 - 另请参见:
-
ClassLoader.getDefinedPackages()
-
hashCode
public int hashCode()
返回从包名称计算的哈希码。- 重写:
-
hashCode
在Object
类 - 结果
- 从包名称计算的哈希码。
- 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
toString
public String toString()
返回此Package的字符串表示形式。 它的值是字符串“package”和包名。 如果定义了包标题,则会附加它。 如果定义了包版本,则会附加它。
-
getAnnotation
public <A extends Annotation> A getAnnotation(类<A> annotationClass)
从界面复制的说明:AnnotatedElement
返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。- Specified by:
-
getAnnotation
在接口AnnotatedElement
- 参数类型
-
A
- 要查询的注释的类型,如果存在则返回 - 参数
-
annotationClass
- 与注释类型对应的Class对象 - 结果
- 如果此元素上存在指定注释类型,则此元素的注释,否则为null
- 异常
-
NullPointerException
- 如果给定的注释类为null - 从以下版本开始:
- 1.5
-
isAnnotationPresent
public boolean isAnnotationPresent(类<? extends Annotation> annotationClass)
如果此元素上存在指定类型的注释,则返回true,否则返回false。 此方法主要用于方便地访问标记注释。此方法返回的真值相当于:
getAnnotation(annotationClass) != null
默认方法的主体被指定为上面的代码。
- Specified by:
-
isAnnotationPresent
,界面AnnotatedElement
- 参数
-
annotationClass
- 与注释类型对应的Class对象 - 结果
- 如果此元素上存在指定注释类型的注释,则返回true,否则返回false
- 异常
-
NullPointerException
- 如果给定的注释类为null - 从以下版本开始:
- 1.5
-
getAnnotationsByType
public <A extends Annotation> A[] getAnnotationsByType(类<A> annotationClass)
从界面复制的说明:AnnotatedElement
返回与此元素关联的注释。 如果没有与此元素关联的注释,则返回值是长度为0的数组。此方法与AnnotatedElement.getAnnotation(Class)
之间的区别在于此方法检测其参数是否为可重复注释类型 (JLS 9.6),如果是,则尝试通过“查看”容器注释来查找该类型的一个或多个注释。 此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响。- Specified by:
-
getAnnotationsByType
在接口AnnotatedElement
- 参数类型
-
A
- 要查询的注释的类型,如果存在则返回 - 参数
-
annotationClass
- 与注释类型对应的Class对象 - 结果
- 如果与此元素关联,则指定注释类型的所有此元素的注释,否则为长度为零的数组
- 异常
-
NullPointerException
- 如果给定的注释类为null - 从以下版本开始:
- 1.8
-
getAnnotations
public Annotation[] getAnnotations()
从界面复制的说明:AnnotatedElement
返回此元素上存在的注释。 如果没有存在于此元素上注解,返回值是长度为0这种方法的调用者可以随意修改返回的数组的数组; 它对返回给其他调用者的数组没有影响。- Specified by:
-
getAnnotations
在界面AnnotatedElement
- 结果
- 此元素上的注释
- 从以下版本开始:
- 1.5
-
getDeclaredAnnotation
public <A extends Annotation> A getDeclaredAnnotation(类<A> annotationClass)
从界面复制的说明:AnnotatedElement
如果直接存在这样的注释,则返回指定类型的此元素的注释,否则返回null。 此方法忽略继承的注释。 (如果此元素上没有直接出现注释,则返回null。)- Specified by:
-
getDeclaredAnnotation
在界面AnnotatedElement
- 参数类型
-
A
- 要查询的注释的类型,如果直接存在则返回 - 参数
-
annotationClass
- 与注释类型对应的Class对象 - 结果
- 如果直接出现在此元素上,则此元素的指定注释类型的注释,否则为null
- 异常
-
NullPointerException
- 如果给定的注释类为null - 从以下版本开始:
- 1.8
-
getDeclaredAnnotationsByType
public <A extends Annotation> A[] getDeclaredAnnotationsByType(类<A> annotationClass)
从界面复制的说明:AnnotatedElement
如果此类注释直接存在或间接存在 ,则返回指定类型的此元素的注释。 此方法忽略继承的注释。 如果此元素上没有直接或间接存在的指定注释,则返回值为长度为0的数组。此方法与AnnotatedElement.getDeclaredAnnotation(Class)
之间的区别在于此方法检测其参数是否为可重复注释类型 (JLS 9.6),并且如果是,则尝试通过“查看”容器注释(例如,如果存在)来查找该类型的一个或多个注释。 此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响。- Specified by:
-
getDeclaredAnnotationsByType
在接口AnnotatedElement
- 参数类型
-
A
- 要查询的注释的类型,如果直接或间接存在则返回 - 参数
-
annotationClass
- 与注释类型对应的Class对象 - 结果
- 如果直接或间接出现在此元素上,则指定注释类型的所有此元素的注释,否则为长度为零的数组
- 异常
-
NullPointerException
- 如果给定的注释类为null - 从以下版本开始:
- 1.8
-
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
从界面复制的说明:AnnotatedElement
返回直接出现在此元素上的注释。 此方法忽略继承的注释。 如果此元素上没有直接存在注释,则返回值为长度为0的数组。此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响。- Specified by:
-
getDeclaredAnnotations
在界面AnnotatedElement
- 结果
- 注释直接出现在此元素上
- 从以下版本开始:
- 1.5
-
-