概述
Package 对象包含有关Java包的实现和规范的版本信息。加载该类的 ClassLoader 实例将检索此版本信息并使其可用。通常,它存储在与类一起分发的清单中。 组成程序包的一组类可以实现特定的规范.规范标题,版本号和供应商字符串可以标识该规范。应用程序可以询问该软件包是否与特定版本兼容,有关详细信息,可以查看 isCompatibleWith 方法。
规范版本号使用的语法由以句点“.”分隔的非负十进制整数组成,例如“ 2.0”或“ 1.2.3.4.5.6.7”。这允许使用可扩展的数字来表示主要版本,次要版本,微型版本等。
实现标题,版本和供应商字符串可标识实现,并且可以方便地使用它们,以便在出现问题时准确报告所涉及的软件包。这三个实现字符串的内容都是特定于供应商的。实现版本字符串没有指定的语法,应仅与期望的版本标识符进行比较以进行相等性比较。在每个 ClassLoader 实例中,来自同一java包的所有类都具有相同的Package对象。静态方法允许按名称查找包,或者查找当前类加载器已知的所有包的集合。
继承关系
public class Package implements java.lang.reflect.AnnotatedElement 实现了 java.lang.reflect.AnnotatedElement 接口
成员属性
包括包名和一些属性 private final String pkgName; private final String specTitle; private final String specVersion; private final String specVendor; private final String implTitle; private final String implVersion; private final String implVendor; private final URL sealBase; private transient final ClassLoader loader;
构造器
Package(String name,
String spectitle, String specversion, String specvendor,
String impltitle, String implversion, String implvendor,
URL sealbase, ClassLoader loader)
{
pkgName = name;
implTitle = impltitle;
implVersion = implversion;
implVendor = implvendor;
specTitle = spectitle;
specVersion = specversion;
specVendor = specvendor;
sealBase = sealbase;
this.loader = loader;
}
关键方法
获取包的名称
public String getName() {
return pkgName;
}
getSpecificationTitle()
获取规范的title
public String getSpecificationTitle() {
return specTitle;
}
getSpecificationVersion()
返回规范的版本
public String getSpecificationVersion() {
return specVersion;
}
getSpecificationVendor()
返回组织,供应商,或者所属公司的名称
public String getSpecificationVendor() {
return specVendor;
}
getImplementationTitle()
返回包的title
public String getImplementationTitle() {
return implTitle;
}
getImplementationVersion()
返回此实现的版本
public String getImplementationVersion() {
return implVersion;
}
getImplementationVendor()
返回提供该实现的 组织、供应商 或者 公司
public String getImplementationVendor() {
return implVendor;
}
isSealed()
判断包是否密封的
public boolean isSealed() {
return sealBase != null;
}
public boolean isSealed(URL url) { return url.equals(sealBase); }
isCompatibleWith()
对和目标版本对比 规范版本,如果当前package的版本比目标版本大,返回true,否则返回false
public boolean isCompatibleWith(String desired) throws NumberFormatException
getPackage()
在调用者 ClassLoader 实例中按名称查找包。调用者 ClassLoader 实例用于查找与命名类相对应的包实例。 在调用者 ClassLoader 实例中按名称查找包。调用者 ClassLoader 实例用于查找与命名类相对应的包实例。 仅当类加载器使用适当的属性创建软件包实例时,软件包才具有版本和规范的属性。通常,这些属性是在与类一起出现的清单中定义的。
@CallerSensitive public static Package getPackage(String name)
getPackages()
获取调用方的 ClassLoader 实例当前已知的所有软件包。这些软件包对应于通过该 ClassLoader 实例加载或可通过名称访问的类。如果调用方的 ClassLoader 实例是引导 ClassLoader 实例,在某些实现中可以用 null 表示,则只有与引导 ClassLoader 实例加载的类相对应的软件包才是回到。
@CallerSensitive public static Package[] getPackages()
getAnnotation()
获取指定类的包。该类的类加载器用于查找与指定类相对应的包实例。如果类加载器是引导类加载器,在某些实现中可以用 null 表示,则搜索由引导类加载器加载的软件包集合以找到该软件包。仅当类加载器使用适当的属性创建软件包实例时,软件包才具有版本和规范的属性。通常,这些属性是在与类一起出现的清单中定义的。
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
isAnnotationPresent()
判断是否使用了某个注解
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) {
return AnnotatedElement.super.isAnnotationPresent(annotationClass);
}
getAnnotationsByType()
此方法返回指定注解类型的注释数组。
@Override
public <A extends Annotation> A[] getAnnotationsByType(Class<A> annotationClass) {
return getPackageInfo().getAnnotationsByType(annotationClass);
}
getAnnotations()
返回所有注解数组。
public Annotation[] getAnnotations() {
return getPackageInfo().getAnnotations();
}
getDeclaredAnnotation()
通过类型,返回直接修饰在当前包上的注解。
@Override
public <A extends Annotation> A getDeclaredAnnotation(Class<A> annotationClass) {
return getPackageInfo().getDeclaredAnnotation(annotationClass);
}
getDeclaredAnnotationsByType()
通过指定类型,直接修饰在某个元素上的注解
@Override
public <A extends Annotation> A[] getDeclaredAnnotationsByType(Class<A> annotationClass) {
return getPackageInfo().getDeclaredAnnotationsByType(annotationClass);
}
getDeclaredAnnotations()
返回直接修饰在当前元素上的所有注解
public Annotation[] getDeclaredAnnotations() {
return getPackageInfo().getDeclaredAnnotations();
}
希望和大家多多交流
我16年毕业以后,做的是前端,目前打算深入学习java开发。内容有任何问题,欢迎各位小伙伴们指正,也希望小伙伴们给我点赞和关注,给我留言,一起交流讨论,共同进步。