未在传递给 class 构造函数的匿名 class 中调用的打印语句
Print statement not called in anonymous class passed to class constructor
我有两个 classes 和一个接口。
接口:
public interface MyBirthdayEvent {
void itsMyBirthday();
}
第一个class:
public class MyBirthdayButton
{
public void addOnClickedListener(MyBirthdayEvent mbe){}
}
第二个class:
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 构造函数中使用了匿名 class。这样做时,我试图让字符串 "Happy Birthday"
打印到控制台。
我的问题是,当我通过创建一个新的 myBirthday 对象在 main 中调用 MyBirthday
构造函数时,我没有看到字符串 "Happy Birthday"
打印到控制台。它不应该打印到控制台吗?如果不是,我做错了什么?
您可以将 System.out.println("some words")
语句移动到您的 MyBirthdayEvent
构造函数
它没有显示在您的控制台中,因为您还没有调用该方法
你能做的是:
public interface MyBirthdayEvent {
void itsMyBirthday();
default void invoke() {
itsMyBirthday();
}
}
...
public class MyBirthdayButton
{
public void addOnClickedListener(MyBirthdayEvent mbe){
mbe.invoke();
}
}
...
此外,没有它它也能工作,但使用 lambda 而不是匿名内部 class。这看起来好多了。
MyBirthday() {
myBirthdayButton.addOnClickedListener(() ->
System.out.println("Happy Birthday"));
}
我有两个 classes 和一个接口。
接口:
public interface MyBirthdayEvent {
void itsMyBirthday();
}
第一个class:
public class MyBirthdayButton
{
public void addOnClickedListener(MyBirthdayEvent mbe){}
}
第二个class:
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 构造函数中使用了匿名 class。这样做时,我试图让字符串 "Happy Birthday"
打印到控制台。
我的问题是,当我通过创建一个新的 myBirthday 对象在 main 中调用 MyBirthday
构造函数时,我没有看到字符串 "Happy Birthday"
打印到控制台。它不应该打印到控制台吗?如果不是,我做错了什么?
您可以将 System.out.println("some words")
语句移动到您的 MyBirthdayEvent
构造函数
它没有显示在您的控制台中,因为您还没有调用该方法
你能做的是:
public interface MyBirthdayEvent {
void itsMyBirthday();
default void invoke() {
itsMyBirthday();
}
}
...
public class MyBirthdayButton
{
public void addOnClickedListener(MyBirthdayEvent mbe){
mbe.invoke();
}
}
...
此外,没有它它也能工作,但使用 lambda 而不是匿名内部 class。这看起来好多了。
MyBirthday() {
myBirthdayButton.addOnClickedListener(() ->
System.out.println("Happy Birthday"));
}