是否有任何方法可以通过方法引用来定义方法,如以下假想代码(和假想语法)所示?
class A
{
public Sometype somefunction(Argtype arg)
{ ... return somevalue; ..}
}
class B
{
public Sometype method = A::somefunction;
}
或
class C
{
public Sometype method(Argtype arg) = A::somefunction;
}
类似的功能对我来说似乎非常有用。方法在编译时是已知的,因此类 B
中的任何定义或C
可能只是(在类型检查之后)接管对A
中已知方法的引用。 。优点:更快的调用(甚至比从新方法直接调用所需的调用还要少) - 我不确定 Java 编译器是否不进行优化?
现在有什么方法可以在 Java 中实现这一点吗(如果是这样,它已经成功地避开了我的搜索)?或者是否有充分的理由不将其引入 Java?是否有任何解决方法可以提供类似的性能优势?
PS:我收到消息称类似的问题标题已被否决和/或关闭。如果这也适用于这里,请帮助我理解原因。提前致谢!
最佳答案
这个问题可以分为两个不同的问题。
- 如何使用其他类中的 A 类方法
- 如何在运行时指定方法的返回类型
关于第一个,看一下Java的继承、多态、抽象类和接口(interface)。
我会将类 A 定义为抽象:
abstract class A{
public Sometype somefunction(Argtype arg)
{ ... return somevalue; ..}
}
B、C 扩展它:
class B extends A{
}
这样B和C就继承了A中实现的所有方法,你可以执行如下操作:
B b = new B();
b.somefunction(arg);
此外,引用第二个问题,如果您在编译时不知道该方法的返回类型,则可以利用java泛型(如果多态性还不够)。这样A类就变成了:
abstract class A{
public T somefunction(Class<T> type)
{ ... return somevalue; ..}
}
前面的示例代码变为:
B b = new B();
b.somefunction(String.class);
关于java - Java 8 中是否可以使用方法引用来定义/实现方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46338361/