2012-04-18 75 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

公共接口....

相关问题