java - 如何将接口(interface)添加到包中?

标签 java oop interface

假设我有以下界面减速:

public interface classListener<classEvent> {

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

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

我该怎么办?

最佳答案

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(自从 Oracle 收购 Sun 以来,目前由 Oracle 控制)。它会编译,但是当你尝试使用它时,你会得到一个 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.

My code that gave me that error:

In ~/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。

关于java - 如何将接口(interface)添加到包中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206572/

相关文章:

python - 如何使用 Python 中的面向对象编程来构建机器学习项目?

Java renameTo() 函数不移动文件

java - Thymeleaf 和 Spring4 配置

Lua 中的 OOP - 创建类?

c++ - 如何强制实现者做某事

c# - 具有接口(interface)和通用模​​型的 WCF

interface - 指向实现相同接口(interface)的不同结构的指针数组

c# - Liskov 替换原则和接口(interface)

java - Spring单元测试,如何检查方法是否将信息存储在数据库中?

java - Hibernate query.list() 方法返回空列表而不是空值