Package
类提供了关于 Java 包的信息,包括包的名称、规范版本、实现版本等。以下是 JDK 8 中 Package
类的部分源代码:
public class Package implements AnnotatedElement {
private static Map<String, Package> packages = new ConcurrentHashMap<>();
private static Map<String, Package> pkgs;
private static Map<Module, Set<Package>> modulePackages;
private static Map<Module, Set<Package>> modulePackagesMap;
private String name;
private String specTitle;
private String specVersion;
private String specVendor;
private String implTitle;
private String implVersion;
private String implVendor;
private URL sealBase;
private final transient ClassLoader loader;
private transient Class<?> packageInfo;
private transient boolean sealed;
private Package(String name, String specTitle, String specVersion, String specVendor,
String implTitle, String implVersion, String implVendor,
URL sealBase, ClassLoader loader)
{
this.name = name;
this.specTitle = specTitle;
this.specVersion = specVersion;
this.specVendor = specVendor;
this.implTitle = implTitle;
this.implVersion = implVersion;
this.implVendor = implVendor;
this.sealBase = sealBase;
this.loader = loader;
if (loader != null) {
packages.put(name, this);
}
}
public String getName() {
return name;
}
public String getSpecificationTitle() {
return specTitle;
}
public String getSpecificationVersion() {
return specVersion;
}
public String getSpecificationVendor() {
return specVendor;
}
public String getImplementationTitle() {
return implTitle;
}
public String getImplementationVersion() {
return implVersion;
}
public String getImplementationVendor() {
return implVendor;
}
public boolean isSealed() {
return sealed;
}
public boolean isSealed(URL url) {
return false;
}
public boolean isCompatibleWith(String desired) throws NumberFormatException {
return false;
}
public static Package getPackage(String name) {
synchronized (packages) {
return packages.get(name);
}
}
public static Package[] getPackages() {
synchronized (packages) {
Collection<Package> values = packages.values();
return values.toArray(new Package[values.size()]);
}
}
public int hashCode() {
return name.hashCode();
}
public boolean equals(Object obj) {
if (obj == this)
return true;
if (obj instanceof Package) {
Package other = (Package)obj;
return name.equals(other.name);
}
return false;
}
public String toString() {
String spec = specTitle;
if (specVersion != null) {
spec += " version " + specVersion;
}
return "Package " + name + ", " + spec;
}
public Annotation[] getAnnotations() {
throw new UnsupportedOperationException("Method not supported");
}
public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
throw new UnsupportedOperationException("Method not supported");
}
public <T extends Annotation> T[] getAnnotationsByType(Class<T> annotationClass) {
throw new UnsupportedOperationException("Method not supported");
}
public <T extends Annotation> T getDeclaredAnnotation(Class<T> annotationClass) {
throw new UnsupportedOperationException("Method not supported");
}
public <T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass) {
throw new UnsupportedOperationException("Method not supported");
}
public Annotation[] getDeclaredAnnotations() {
throw new UnsupportedOperationException("Method not supported");
}
}
Package
类提供了一些方法,用于获取包的信息,如包名、规范版本、实现版本等。它还包含了一些与包相关的操作,如判断包是否被封闭(sealed)等。在 Java 中,Package
类的实例是通过类加载器来创建和管理的。