2012-04-18 77 views
0

假設我有以下接口減速:如何將界面添加到包中?

public interface classListener<classEvent> { 

    void classMethod1(classEvent x); 
    void classMethod2(classEvent y); 
    void classMethod3(classEvent z); 
} 

,並假設我想這個接口添加到whatever.something包。

我該怎麼辦?

+0

只需創建界面withing包。 – Asterisk 2012-04-18 09:30:59

+0

不確定你在哪裏混淆?這是一個非常明顯的方式。 – Lion 2012-04-18 09:37:47

回答

1

將一個package聲明在文件的頂部:

package your.package.name; 

public interface classListener<classEvent> { 

    void classMethod1(classEvent x); 
    void classMethod2(classEvent y); 
    void classMethod3(classEvent z); 
} 

suppose I want to add this interface to java.something package

您不能添加到java.包。這僅僅是爲了JDK(目前由Sun收購Sun後控制)。它會編譯,但是當您嘗試使用它,你會得到一個SecurityException

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util 
    at java.lang.ClassLoader.preDefineClass(ClassLoader.java:479) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:625) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
    at java.lang.ClassLoader.defineClass1(Native Method) 
    at java.lang.ClassLoader.defineClassCond(ClassLoader.java:631) 
    at java.lang.ClassLoader.defineClass(ClassLoader.java:615) 
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141) 
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:283) 
    at java.net.URLClassLoader.access$000(URLClassLoader.java:58) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:197) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 
Could not find the main class: UsePackage. Program will exit.

我的代碼給了我這個錯誤:

~/temp/java/util/AddPackage.java

package java.util; 

public interface AddPackage { 
    void doSomething(); 
} 

~/temp/UsePackage.java

import java.util.AddPackage; 

class UsePackage implements AddPackage { 
    public static final void main(String[] args) { 
     new UsePackage().doSomething(); 
    } 

    public void doSomething() { 
     System.out.println("Hi"); 
    } 
} 

命令:

~/temp$ javac java/util/AddPackage.java 
~/temp$ javac UsePackage.java 
~/temp$ java UsePackage

......於是發生了錯誤。使用Oracle的(Sun)JVM。

+0

認爲軟件包名稱和類名稱不應該衝突,這就是全部 – 2012-04-18 09:37:52

+0

@MichaelLaffargue:'java。*'軟件包由JDK定義並保留給當前由Oracle控制的JDK。 – 2012-04-18 09:38:00

+0

@AleksandrKravets:我試了一下,得到了答案中顯示的異常。 – 2012-04-18 09:38:24

0

包decl爲下面的內容創建一個名稱空間。只需在你的界面文件中添加一個軟件包decl作爲第一行。

包org.whatever.foo

公共接口....

相關問題