【发布时间】:2013-06-08 04:21:43
【问题描述】:
在 Java 类中可以或不可以有内部接口是否有充分的理由? (就像你会一个内部类)。我无法通过 Google 找到明确的答案,但您似乎无法像使用内部类一样嵌入接口。我的猜测是,Java 的创建者没有看到让它成为可能的充分理由,所以它不是,但也许真的有很好的理由?
例如,我无法编译(这是一个大类)
package buttonGetSourceObject;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class ClassWithButton implements ActionListener, ButtonOwner{
private String objectName = "";
public ClassWithButton(String string) {
objectName = string;
JFrame f = new JFrame();
JPanel p = new JPanel();
MyJButton b = new MyJButton(this,"Press This Button for Name of Owner of Button");
b.addActionListener(this);
f.add(p);
p.add(b);
f.pack();
f.setVisible(true);
}
public static void main(String[] args){
ClassWithButton c = new ClassWithButton("object1name");
}
@Override
public void actionPerformed(ActionEvent arg0) {
((ButtonOwner)((MyJButton)arg0.getSource()).getOwner()).printInstanceName();
}
public interface ButtonOwner {
public void printInstanceName();
}
private class MyJButton extends JButton {
/**
*
*/
private static final long serialVersionUID = 1L;
Object owner = null;
public Object getOwner() {
return owner;
}
public void setOwner(Object owner) {
this.owner = owner;
}
public MyJButton(Object o, String string){
owner = o;
this.setText(string);
}
}
@Override
public void printInstanceName() {
System.out.println(this);
}
public String getObjectName() {
return objectName;
}
public void setObjectName(String objectName) {
this.objectName = objectName;
}
public String toString(){
return this.getObjectName();
}
} //end
编译器似乎根本无法识别内部接口“ButtonOwner”存在
【问题讨论】:
-
您发现嵌套接口的哪些方面是不可能的(对于嵌套类恰好可能)?
-
你可以有内部接口(类内部的接口)。您是指接口中的接口吗?
-
我很确定我的 IDE (Eclipse Juno) 在我尝试这样做时会失败。此外,我在谷歌上找不到任何证据支持您可以嵌套接口的信念(或者不是,也没有任何证据)。
-
我的意思是类内部的接口。
-
您的问题“为什么可以或不能”完全没有意义。
标签: java interface inner-classes