将接口的对象作为方法的参数进行初始化?
我所知,你不能做的接口的对象,而不是然而实现接口,类的对象,而在寻找的事件处理程序的教程,我发现了以下内容:将接口的对象作为方法的参数进行初始化?
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
tf.setText("Welcome to Javatpoint.");
}
});
首先,我不知道你可以在一个方法的参数中构造一个对象。其次,我知道ActionListener是一个接口,那么new ActionListener
究竟在做什么呢?在阅读后我得到了一个模糊的想法,这实际上是在创建一个实现Action Listener
的新类,但是这个类叫什么?我可以制作这个班的其他物体吗?最后,究竟是上面的代码从以下任何不同:
//where MyActionListener is a class that implements ActionListener
MyActionListener objectOfActionListener = new MyActionListener();
b.addActionListener(objectOfActionListener);
//and the method for actionPerformed is in the MyActionListener class
这是一个anonymous class实现了ActionListener
接口。
你当然可以创建一个你自己的显式类并实例化它,但除非你需要在多个地方重复使用相同的逻辑,否则没有什么大的好处。
啊,对,在这里创建的对象也是一个匿名对象?它是否仅仅作为该方法的争论而存在? – Psear
@Psear在这种情况下,雅。您可以将其分配给一个类型为ActionEvent的变量,以延长其使用时间并在其他地方使用。还应该注意的是,通过引入'FunctionalInterface's,不再需要使用匿名类。您的整个代码片段可以被替换为一个类似于'(ActionEvent e)=> {tf.setText(“Welcome to Javatpoint。”)的lambda。 }'。 – Carcigenicate
这是一个匿名类。它创建一个实现ActionListener的未命名类。当某些事情要求您使用实现接口的类时很有用,但您不希望编写完整的命名类的麻烦。 – Carcigenicate
请参阅:https://stackoverflow.com/help/someone-answers – c0der