Java 在传递给类构造函数的匿名类中未调用Print语句
我有两个类和一个接口 接口:Java 在传递给类构造函数的匿名类中未调用Print语句,java,anonymous-class,Java,Anonymous Class,我有两个类和一个接口 接口: public interface MyBirthdayEvent { void itsMyBirthday(); } 头等舱: public class MyBirthdayButton { public void addOnClickedListener(MyBirthdayEvent mbe){} } 二等舱: public class MyBirthday { private MyBirthdayButton myBirthday
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();
}
}
从代码中可以看出,我在MyBirth构造函数中使用了一个匿名类。在这样做时,我试图将字符串“生日快乐”
打印到控制台
我的问题是,当我主要通过创建一个新的MyBirthday对象来调用
MyBirthday
构造函数时,我没有看到控制台上打印的字符串“生日快乐”
。它不应该打印到控制台上吗?如果没有,我做错了什么?您可以将System.out.println(“一些单词”)
语句移动到您的MyBirthdayEvent
构造函数中
它没有显示在您的控制台中,因为您没有调用该方法您可以将
System.out.println(“一些单词”)
语句移动到MyBirthdayEvent
构造函数中
它没有显示在您的控制台中,因为您没有调用该方法您可以执行以下操作:
public interface MyBirthdayEvent {
void itsMyBirthday();
default void invoke() {
itsMyBirthday();
}
}
此外,它在没有它的情况下也可以工作,但是使用lambda而不是匿名内部类。这看起来好多了
MyBirthday() {
myBirthdayButton.addOnClickedListener(() ->
System.out.println("Happy Birthday"));
}
你能做的是:
public interface MyBirthdayEvent {
void itsMyBirthday();
default void invoke() {
itsMyBirthday();
}
}
此外,它在没有它的情况下也可以工作,但是使用lambda而不是匿名内部类。这看起来好多了
MyBirthday() {
myBirthdayButton.addOnClickedListener(() ->
System.out.println("Happy Birthday"));
}
因此,
mybirth
的构造函数添加了onclickedListener
。究竟是什么调用了上述方法?这是不是应该像Swing一样连接到GUI中?正如代码所示,没有任何东西可以调用该方法。除非我没有正确地阅读某些内容。总的来说,当我调用构造函数时,它不应该调用print语句吗,因为print语句存在于构造函数中?print语句不在构造函数中,而是在方法itsmyBirth()
中调用的(正如答案所指出的)。调用该方法,或者将print语句移动到构造函数中。您应该调用它的mybirth()方法,以便能够看到输出。因此mybirth
的构造函数添加了onclickedListener
。究竟是什么调用了上述方法?这是不是应该像Swing一样连接到GUI中?正如代码所示,没有任何东西可以调用该方法。除非我没有正确地阅读某些内容。总的来说,当我调用构造函数时,它不应该调用print语句吗,因为print语句存在于构造函数中?print语句不在构造函数中,而是在方法itsmyBirth()
中调用的(正如答案所指出的)。调用该方法,或者将print语句移动到构造函数中。您应该调用itsMyBirthday()方法,以便能够看到输出。接口默认值和lambda建议使用得很好。接口默认值和lambda建议使用得很好。