包级别的方法

4

是否可能编写一个在包级别可用的方法?假设foo是一个包:

long version = foo.getPackageVersion();

1
不行,因为包既不是类也不是对象。 - obataku
4个回答

6
您可以在Scala中理论上完成此操作,但需要创建一个类来存储这些包级别的方法和对象。
您可以创建包级别的Javadocs,并为其添加注释,但不能添加字段、构造函数或方法。
在名为package-info.java的文件中,位于mypackage包中。
/**
 * 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中添加的。


非常好的答案,这也是我会采取的方向。 - aymeric

6
不是的。方法只能在类中定义,其他地方不行。
包不是“物理”的,它不能作为字节码的容器。包只是类、枚举和接口的命名空间。

1
您可以为包添加注释,并且它们可以提供包版本(请参见我的答案)。 - Peter Lawrey

0

包本身既不是对象也不是类。只有类才有方法。


0
在Java中,方法/操作应该在类内部。如果您尝试在类外部添加一个方法,编译器会报错。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接