java - Java 8 中是否可以使用方法引用来定义/实现方法?

标签 java class methods definition method-reference

是否有任何方法可以通过方法引用来定义方法,如以下假想代码(和假想语法)所示?

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:我收到消息称类似的问题标题已被否决和/或关闭。如果这也适用于这里,请帮助我理解原因。提前致谢!

最佳答案

这个问题可以分为两个不同的问题。

  1. 如何使用其他类中的 A 类方法
  2. 如何在运行时指定方法的返回类型

关于第一个,看一下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/

相关文章:

java - 计算android中的时差

java - 将 JButton 添加到 JScrollPane

typescript - 为什么 Typescript 允许实现抽象类?

java - JNI/安卓 : call to non static method in Java from C++?

java - 如何从多个包创建单个 jar?

java - 问题 : Reading 10 different marks into my marks variable. FOR 循环

c++ - 静态类 C++

java - 初始化程序对静态字段的非法引用

c++ - 将 byte[] 数组作为方法的多个参数传递

java - 将 foreach 循环与另一个类中的方法结合使用 (Java)