有没有办法在其定义之外的匿名 class 中调用未覆盖或未实现的方法?
Is there a way to invoke a non-overridden or non-implemented method in an anonymous class outside of its definition?
Phone 接口中有 3 个方法签名,所有这些方法签名都在智能手机的匿名 class 定义中实现。但是,我希望匿名 class 有另一个 Phone 接口中不存在的方法。
有人可以帮助我了解如何在匿名 class 定义之外调用该方法吗?
如果可能的话,你能告诉我在文档中的什么地方可以找到这个吗?
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...
}
}
有趣的事实:var
关键字让您到达那里。
你看,当你这样做的时候:
SomeType myVar = new SomeType() { ...
然后编译器走“简单”路线,只记住:myVar
是类型 SomeType
。
但是当你这样做时:
var myVar = new SomeType() { ...
然后编译器实际上确定了在右侧定义的非常具体的特殊类型。然后任何额外定义的方法实际上是“可见的”,您可以调用它。
有关详细信息,请参阅此 edition 的 JavaSpecialists 时事通讯。
Phone 接口中有 3 个方法签名,所有这些方法签名都在智能手机的匿名 class 定义中实现。但是,我希望匿名 class 有另一个 Phone 接口中不存在的方法。
有人可以帮助我了解如何在匿名 class 定义之外调用该方法吗?
如果可能的话,你能告诉我在文档中的什么地方可以找到这个吗?
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...
}
}
有趣的事实:var
关键字让您到达那里。
你看,当你这样做的时候:
SomeType myVar = new SomeType() { ...
然后编译器走“简单”路线,只记住:myVar
是类型 SomeType
。
但是当你这样做时:
var myVar = new SomeType() { ...
然后编译器实际上确定了在右侧定义的非常具体的特殊类型。然后任何额外定义的方法实际上是“可见的”,您可以调用它。
有关详细信息,请参阅此 edition 的 JavaSpecialists 时事通讯。