有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?
Posted
技术标签:
【中文标题】有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?【英文标题】: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 - 是的,你是对的。删除了我的评论。 【参考方案1】:有趣的事实:var
关键字可以让你到达那里。
你看,当你这样做时:
SomeType myVar = new SomeType() ...
然后编译器采用“简单”路线,并且只记住:myVar
的类型为 SomeType
。
但是当你这样做时:
var myVar = new SomeType() ...
那么编译器实际上会确定右侧定义的非常具体的特殊类型。然后任何额外定义的方法实际上都是“可见的”,你可以调用它。
有关更多详细信息,请参阅 JavaSpecialists 时事通讯的 edition。
【讨论】:
有趣...我会试一试。谢谢以上是关于有没有办法在其定义之外的匿名类中调用未覆盖或未实现的方法?的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net MVC 中的 jquery 验证错误 - 无法获取属性“调用”的值:对象为空或未定义