java - 传递给类构造函数的匿名类中未调用的打印语句

标签 java anonymous-class

我有两个类和一个接口(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/

相关文章:

java - 如何与 Akka Actor 中的游戏持久性 (JPA) 连接?

java - 关于匿名类的 ClassCastException (java)

kotlin - 从回调 kotlin 获取值

java - 为什么在实例初始值设定项内不允许递增 (`x++;` )但未声明的字段,但如果包装到匿名类中则可以?

Java匿名内部类

java - jdbc PreparedStatement 中的问号问题

java - 将 session 工厂从一项服务传递到另一项服务

java - 在类路径中指定 log4j

java - 使用匿名类有什么害处?

java - 从多个 View 调用 onCreateOptionsMenu()