- java.lang.Object
-
- java.lang.Package
-
- All Implemented Interfaces:
-
AnnotatedElement
public class 软件包 extends Object implements AnnotatedElement
表示与类加载器关联的运行时包的元数据。 元数据包括注释,版本控制和密封。与运行时程序包中的类相同的代码源,从
package-info.class
读取运行时程序包的注释。构成运行时程序包的一组类可以实现特定的规范。 当定义
软件包
时,可以提供规范标题,版本和供应商(指示规范的所有者/维护者)。 应用程序可以通过使用Package.isCompatibleWith(String)
方法询问软件包
是否与特定规范版本兼容。 另外,当定义包时,可以提供有关构成运行时包的实际类的信息。 该信息包括实现标题,版本和供应商(指示类的供应商)。A
软件包
可以使用ClassLoader.definePackage(String, String, String, String, String, String, String, URL)
方法显式定义。 呼叫者提供规范和实现标题,版本和供应商。 来电还指示包裹是否为sealed 。 如果软件包
没有明确的运行包定义在运行时包中的类定义时,那么一个软件包
自动地被类的定义类加载器定义,如下所示。为命名模块中的类自动定义的一个
软件包
具有以下属性:- 该包的名称源自binary names的类。 由于命名模块中的类必须在命名的包中,所以派生的名称永远不会为空。
- 如果已知的话,该封装将以module location作为代码来源。
- 规格和实现标题,版本和供应商未指定。
- 软件包上的任何注释从上述
package-info.class
读取。
对于未命名模块中的类自动定义的
软件包
具有以下属性:- 包的名称是
""
(对于未命名包中的类),或派生自类的类(针对命名包中的类)的binary names 。 - 包装没有密封。
- 规格和实现标题,版本和供应商未指定。
- 软件包上的任何注释从上述
package-info.class
读取。
A
软件包
可以用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运行时包
-
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 弃用的方法 Modifier and Type 方法 描述 <A extends Annotation>
AgetAnnotation(Class<A> annotationClass)
返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。Annotation[]
getAnnotations()
返回此元素上 存在的注释。<A extends Annotation>
A[]getAnnotationsByType(Class<A> annotationClass)
返回与此元素 相关联的注释。<A extends Annotation>
AgetDeclaredAnnotation(Class<A> annotationClass)
如果这样的注释 直接存在 ,则返回指定类型的元素注释,否则返回null。Annotation[]
getDeclaredAnnotations()
返回 直接存在于此元素上的注释。<A extends Annotation>
A[]getDeclaredAnnotationsByType(Class<A> annotationClass)
如果此类注释 直接存在或 间接存在,则返回该元素的注释(指定类型)。String
getImplementationTitle()
返回此包的标题。String
getImplementationVendor()
返回实现此软件包的供应商,如果不知道则返回null
。String
getImplementationVersion()
返回这个实现的版本。String
getName()
返回此包的名称。static 软件包
getPackage(String name)
已过时。如果多个类加载器彼此委托并定义具有相同包名称的类,并且一个这样的加载器依赖于getPackage
的查找行为从父加载器返回一个软件包
,则由软件包
公开的属性可能不如预期的那样其余的程序。 例如,软件包
将仅显示由父加载程序定义的package-info.class
文件中的注释,即使注释存在于由子加载器定义的package-info.class
文件中。 更健壮的方法是使用ClassLoader.getDefinedPackage(java.lang.String)
方法,该方法为指定的类加载器返回一个软件包
。static 软件包[]
getPackages()
返回由调用者的类加载器及其祖先定义的所有软件包
。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()
返回此包的字符串表示形式。
-
-
-
方法详细信息
-
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
。
-
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。- 结果
- 如果包装密封,则为真,否则为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)
已过时。 如果多个类加载器彼此委托并定义具有相同包名称的类,并且一个这样的加载器依赖于getPackage
的查找行为从父加载器返回一个软件包
,则由软件包
公开的属性可能不如预期的那样其余的程序。 例如,软件包
将仅显示由父加载程序定义的package-info.class
文件的注释,即使子载入程序定义的package-info.class
文件中存在注释。 更强大的方法是使用ClassLoader.getDefinedPackage(java.lang.String)
方法,该方法为指定的类加载器返回一个软件包
。在调用者的类加载器及其祖先中通过名称查找包。如果调用者的类加载器定义
软件包
给定的名称,该软件包
返回。 否则,对于给定名称的软件包
,调用者的类加载器的祖先被递归地搜索(由父母父代)。调用此方法相当于在调用者的类加载器的一个
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”和包名称。 如果定义了包标题,则将其附加。 如果定义了包版本,则会附加它。
-
getAnnotation
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
描述从接口AnnotatedElement
复制返回该元素的,如果这样的注释 ,否则返回null指定类型的注释。- Specified by:
-
getAnnotation
在接口AnnotatedElement
- 参数类型
-
A
- 查询的注释类型,如果存在则返回 - 参数
-
annotationClass
- 对应于注释类型的Class对象 - 结果
- 该元素的注释指定的注释类型,如果存在于此元素,否则为null
- 异常
-
NullPointerException
- 如果给定的注释类为空 - 从以下版本开始:
- 1.5
-
isAnnotationPresent
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
如果此元素上存在指定类型的注释,则返回true,否则返回false。 该方法主要用于方便访问标记注释。该方法返回的真值等价于:
getAnnotation(annotationClass) != null
默认方法的主体被指定为上述代码。
- Specified by:
-
isAnnotationPresent
在接口AnnotatedElement
- 参数
-
annotationClass
- 对应于注释类型的Class对象 - 结果
- 如果此元素上存在指定注释类型的注释,则为true,否则为false
- 异常
-
NullPointerException
- 如果给定的注释类为空 - 从以下版本开始:
- 1.5
-
getAnnotationsByType
public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass)
说明从界面AnnotatedElement
复制返回与此元素相关联的注释。 如果没有与此元素相关联的注释,则返回值是长度为0.的数组。此方法与AnnotatedElement.getAnnotation(Class)
之间的区别在于该方法检测其参数是否是可重复注释类型 (JLS 9.6),如果是,则尝试通过“查看”容器注释来查找该类型的一个或多个注释。 该方法的调用者可以自由修改返回的数组; 它将对返回给其他调用者的数组没有影响。- Specified by:
-
getAnnotationsByType
在接口AnnotatedElement
- 参数类型
-
A
- 要查询的注释类型,如果存在则返回 - 参数
-
annotationClass
- 对应于注释类型的Class对象 - 结果
- 如果与此元素相关联,则指定注释类型的所有元素注释,否则为长度为零的数组
- 异常
-
NullPointerException
- 如果给定的注释类为空 - 从以下版本开始:
- 1.8
-
getAnnotations
public Annotation[] getAnnotations()
描述从接口AnnotatedElement
复制返回此元素上存在的注释。 如果没有存在于此元素上注解,返回值是长度为0这种方法的调用者可以随意修改返回的数组的数组; 它将对返回给其他调用者的数组没有影响。- Specified by:
-
getAnnotations
在接口AnnotatedElement
- 结果
- 此元素上出现的注释
- 从以下版本开始:
- 1.5
-
getDeclaredAnnotation
public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass)
描述从接口AnnotatedElement
复制如果这样的注释直接存在 ,则返回指定类型的元素注释,否则返回null。 此方法忽略继承的注释。 (如果此元素上没有注释,则返回null)- Specified by:
-
getDeclaredAnnotation
在接口AnnotatedElement
- 参数类型
-
A
- 查询的注释类型,如果直接出现则返回 - 参数
-
annotationClass
- 对应于注释类型的Class对象 - 结果
- 如果直接出现在该元素上,则指定注释类型的元素注释,否则为null
- 异常
-
NullPointerException
- 如果给定的注释类为空 - 从以下版本开始:
- 1.8
-
getDeclaredAnnotationsByType
public <A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass)
说明从界面AnnotatedElement
复制如果此类注释直接存在或间接存在,则返回该元素的注释(指定类型)。 此方法忽略继承的注释。 如果没有直接或间接出现在此元素上的指定注释,则返回值为长度为0.的数组。此方法与AnnotatedElement.getDeclaredAnnotation(Class)
之间的区别在于该方法检测其参数是否为可重复注释类型 (JLS 9.6),以及如果是,尝试通过“查看”容器注释(如果存在)来查找该类型的一个或多个注释。 该方法的调用者可以自由修改返回的数组; 它将对返回给其他调用者的数组没有影响。- Specified by:
-
getDeclaredAnnotationsByType
在接口AnnotatedElement
- 参数类型
-
A
- 直接或间接出现时查询和返回的注释类型 - 参数
-
annotationClass
- 对应于注释类型的Class对象 - 结果
- 指定注释类型的所有这些元素的注释,如果直接或间接地存在于该元素上,否则为长度为零的数组
- 异常
-
NullPointerException
- 如果给定的注释类为空 - 从以下版本开始:
- 1.8
-
getDeclaredAnnotations
public Annotation[] getDeclaredAnnotations()
描述从接口AnnotatedElement
复制返回直接存在于此元素上的注释。 此方法忽略继承的注释。 如果此元素上没有直接显示的注释,则返回值为长度为0的数组。此方法的调用者可以自由修改返回的数组; 它将对返回给其他调用者的数组没有影响。- Specified by:
-
getDeclaredAnnotations
在接口AnnotatedElement
- 结果
- 此元素上直接显示的注释
- 从以下版本开始:
- 1.5
-
-