如何在包中添加接口?

时间:2012-04-18 09:28:41

标签: java oop interface

假设我有以下界面减速:

public interface classListener<classEvent> {

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

并假设我想将此接口添加到 whatever.something 包中。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

在文件顶部放置package语句:

package your.package.name;

public interface classListener<classEvent> {

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

假设我想将此接口添加到 java.something

您无法添加到java.个软件包。这仅适用于JDK(自收购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。

答案 1 :(得分:0)

package decl为下面的内容创建一个名称空间。只需在接口文件中添加一个包decl作为第一行。

包org.whatever.foo

公共界面......