Java クラス内に内部インターフェースを持つことができる、またはできない理由はありますか? (内部クラスのように)。Google で決定的な答えを見つけることができませんでしたが、内部クラスと同じ方法でインターフェイスを埋め込むことはできないようです。私の推測では、Java の作成者はそれを可能にする大きな理由を理解していなかったので、そうではありませんが、本当に正当な理由があるのでしょうか?
たとえば、これをコンパイルできません (すべて 1 つの大きなクラスです)。
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」が存在することをまったく認識していないようです