【问题标题】:Method on package level封装级别的方法
【发布时间】:2012-08-16 05:46:07
【问题描述】:

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

long version = foo.getPackageVersion();

【问题讨论】:

  • 不,因为包既不是类也不是对象。

标签: java packages


【解决方案1】:

不,不是。方法只能在类上定义。无处可去。

包不是物理的,它不能作为字节码的容器。包只是类、枚举和接口的命名空间。

【讨论】:

  • 你可以给包添加注释,它们可以提供包版本(见我的回答)
【解决方案2】:

理论上你可以在 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中添加的

【讨论】:

  • 很好的答案,这也是我要走的方向。
【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2014-06-02
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多