【问题标题】:Is there a way to invoke a non-overridden or non-implemented method in an anonymous class outside of its definition?有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?
【发布时间】:2021-12-22 09:53:51
【问题描述】:

Phone 接口中有 3 个方法签名,所有这些都在智能手机的匿名类定义中实现。但是,我希望匿名类具有 Phone 接口中不存在的另一种方法。

有人可以帮我理解如何在匿名类定义之外调用该方法吗?

如果可能,您能否告诉我在文档中的何处可以找到它?

public class App {
    public static void main(String[] args) throws Exception {
        Phone smartPhone = new Phone() {
            @Override
            public void turnOn() { System.out.println("Turning on..."); }

            @Override
            public void turnOff() { System.out.println("Turning off..."); }
            
            @Override
            public void makeCall() { System.out.println("Calling..."); }

            public void launchCamera() { System.out.println("Launching camera..."); }            
            
        };

        // smartPhone.launchCamera(); -> This does not work...

    }
}

【问题讨论】:

  • @GhostCat - 是的,你是对的。删除了我的评论。

标签: java anonymous-class


【解决方案1】:

有趣的事实:var 关键字可以让你到达那里。

你看,当你这样做时:

SomeType myVar = new SomeType() { ...

然后编译器采用“简单”路线,并且只记住:myVar 的类型为 SomeType

但是当你这样做时:

var myVar = new SomeType() { ...

那么编译器实际上会确定右侧定义的非常具体的特殊类型。然后任何额外定义的方法实际上都是“可见的”,你可以调用它。

有关更多详细信息,请参阅 JavaSpecialists 时事通讯的 edition

【讨论】:

  • 有趣...我会试一试。谢谢
猜你喜欢
  • 2019-10-30
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 2020-08-29
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多