【发布时间】:2012-08-16 05:46:07
【问题描述】:
是否可以编写在包级别可用的方法?假设foo 是一个包:
long version = foo.getPackageVersion();
【问题讨论】:
-
不,因为包既不是类也不是对象。
是否可以编写在包级别可用的方法?假设foo 是一个包:
long version = foo.getPackageVersion();
【问题讨论】:
不,不是。方法只能在类上定义。无处可去。
包不是物理的,它不能作为字节码的容器。包只是类、枚举和接口的命名空间。
【讨论】:
理论上你可以在 scala 中执行此操作,但它会创建一个类来存储这些包级方法和对象。
您可以创建包级别的 javadocs,并为其添加注释,但不能添加字段、构造函数或方法。
在包mypackage中名为package-info.java的文件中
/**
* Javadoc comments for package {@code mypackage}.
*/
@PackageVersion(getPackageVersion = "1.2.3")
package mypackage;
@Retention(RetentionPolicy.RUNTIME)
public @interface PackageVersion {
String getPackageVersion();
}
Package mypackage = Package.getPackage("mypackage");
PackageVersion version = mypackage.getAnnotation(PackageVersion.class);
System.out.println("Package version: "+version.getPackageVersion());
打印
Package version: 1.2.3
这个设施是在JSR-175中添加的
【讨论】:
在 Java 中,方法/操作应该在类中。如果您尝试在类外添加方法,编译器会报错。
【讨论】:
没有。包本身既不是对象也不是类。只有类有方法。
【讨论】: