传递给类构造函数的匿名类中未调用Print语句

时间:2017-05-03 03:29:26

标签: java anonymous-class

我有两个班级和一个界面。

接口:

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"打印到控制台。它不应该打印到控制台?如果没有,我做错了什么?

2 个答案:

答案 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构造函数

它没有在您的控制台中显示,因为您还没有调用该方法