我有两个类和一个接口(interface)。
界面:
public interface MyBirthdayEvent {
void itsMyBirthday();
}
头等舱:
public class MyBirthdayButton
{
public void addOnClickedListener(MyBirthdayEvent mbe){}
}
第二类:
public class MyBirthday {
private MyBirthdayButton myBirthdayButton = new MyBirthdayButton();
MyBirthday() {
myBirthdayButton.addOnClickedListener(new MyBirthdayEvent() {
public void itsMyBirthday() {
System.out.println("Happy Birthday");
}
});
}
}
然后在 main 中,我有这个:
public class TestThisStuff {
public static void main(String[] args) {
MyBirthday myBirthday = new MyBirthday();
}
}
从代码中可以看出,我在 MyBirthday 构造函数中使用了匿名类。在此过程中,我尝试将字符串 "Happybirthday"
打印到控制台。
我的问题是,当我通过创建新的 myBirthday 对象来调用 main 中的 MyBirthday
构造函数时,我没有看到字符串 "Happybirthday"
打印到控制台。它不应该打印到控制台吗?如果不是,我做错了什么?
最佳答案
你可以做的是:
public interface MyBirthdayEvent {
void itsMyBirthday();
default void invoke() {
itsMyBirthday();
}
}
...
public class MyBirthdayButton
{
public void addOnClickedListener(MyBirthdayEvent mbe){
mbe.invoke();
}
}
...
此外,没有它它也可以工作,但使用 lambda 而不是匿名内部类。这看起来好多了。
MyBirthday() {
myBirthdayButton.addOnClickedListener(() ->
System.out.println("Happy Birthday"));
}
关于java - 传递给类构造函数的匿名类中未调用的打印语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43750577/