我有两个班级和一个界面。
接口:
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");
}
});
}
}
然后在主要方面,我有这个:
public class TestThisStuff {
public static void main(String[] args) {
MyBirthday myBirthday = new MyBirthday();
}
}
从代码中可以看出,我在MyBirthday构造函数中使用了一个匿名类。在这样做时,我试图将字符串"Happy Birthday"
打印到控制台。
我的问题是,当我通过创建一个新的myBirthday对象来调用main中的MyBirthday
构造函数时,我没有看到字符串"Happy Birthday"
打印到控制台。它不应该打印到控制台?如果没有,我做错了什么?
答案 0 :(得分:2)
你可以做的是:
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"));
}
答案 1 :(得分:1)
您可以将System.out.println("some words")
语句移至MyBirthdayEvent
构造函数
它没有在您的控制台中显示,因为您还没有调用该方法