2012-08-15 59 views
4

是否可以編寫一個在程序包級別可用的方法?假設foo是一個包:程序包級別的方法

long version = foo.getPackageVersion(); 
+1

沒有,因爲軟件包既不是類也不是對象。 – oldrinb 2012-08-15 21:18:07

+3

也許在Java 9 – 2012-08-15 21:18:39

回答

6

不,它不是。方法只能在類上定義。無處。

一個包不是物理,它不能作爲字節碼的容器。包只不過是類,枚舉和接口的命名空間。

+1

你可以添加註釋到包,他們可以提供包版本(請參閱我的答案) – 2012-08-15 21:35:39

0

編號包可以不是對象或類本身。只有類有方法。

0

Java方法/操作應該在類中。編譯器抱怨如果您嘗試在類外部添加方法。

6

你可以在scala中做到這一點,但它創建了一個類來存儲這些包級別的方法和對象。

您可以創建包級別的javadoc,併爲其添加註釋,但不添加字段,構造函數或方法。

在一個文件中包稱爲package-info.javamypackage

/** 
* 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

+0

優秀的答案,這也是我會採取的方向。 – aymeric 2012-08-15 21:52:52

+0

不錯的解決方案+1 – brimborium 2012-08-15 22:06:01