Java 如何引用实例方法

Java 如何引用实例方法,java,reflection,Java,Reflection,我创建了一个类(class Special),其方法(Special.method())将根据调用Special.method()的方法做出不同的反应。因此,假设某些类中的方法X调用Special.method(),如果方法X中存在特定的注释,则当调用方法中不存在此类注释时,Special.method()中调用的计算过程将不同。另外,由于我将使用第三方库,所以不能保证在调用Special.method()和方法X时使用相同的线程 我想知道如何在Java7中获得对实例方法的引用 public c

我创建了一个类(class Special),其方法(Special.method())将根据调用Special.method()的方法做出不同的反应。因此,假设某些类中的方法X调用Special.method(),如果方法X中存在特定的注释,则当调用方法中不存在此类注释时,Special.method()中调用的计算过程将不同。另外,由于我将使用第三方库,所以不能保证在调用Special.method()和方法X时使用相同的线程

我想知道如何在Java7中获得对实例方法的引用

public class MyClass{
    public void myMethod(){
        ....
    }
}
我知道我能做到

MyClass.class.getMethod(methodName);
但是这种技术很容易出错,因为它依赖于字符串输入(例如,当方法名被更改时,等等)。是否有更可靠的方法来引用某个方法


谢谢

如果没有一些相当粗糙的反射,Java不支持方法引用。Java有功能接口,可以像引用一样工作,但由于它们的目标用途,它们都接受或返回至少一个值。对于不带参数并返回
void
的方法,没有像示例中那样的接口

 // Assignment context
 Predicate<String> p = String::isEmpty;
//分配上下文
谓词p=String::isEmpty;
将声明对字符串#isEmpty()方法的方法引用,该方法返回布尔值。在
java.lang.function
包中存在类似的接口


关于编辑:如果要查找方法的调用方,请参见此处:

错误:有一个与您的
myMethod
兼容的函数接口(例如,不接受参数,返回类型为
void
),它不在
java.util.function
中,而是在
java.lang
Runnable

public class MyClass{
    public void myMethod(){
        System.out.println("myMethod was called");
    }
}
class Example
{
    public static void main (String[] args)
    {
        MyClass c = new MyClass();
        Runnable r = c::myMethod;                // <===
        r.run();                                 // <===
    }
}
公共类MyClass{
公共方法(){
System.out.println(“调用了myMethod”);
}
}
课例
{
公共静态void main(字符串[]args)
{
MyClass c=新的MyClass();

Runnable r=c::myMethod;//指向哪个方法?您想如何描述它?在本例中,指向myMethod方法。我需要MyClass.class.getMethod(“myMethod”)的替代方法;是否可能会有更多的方法?在这种情况下,您想如何描述您需要的方法?是的,可能会有更多的方法。但我可以为每个方法创建一个引用变量。尽管如此,我还是希望有一种聪明的方法动态引用这些方法。谢谢,不幸的是,事实并非如此。Java 8中引入的新功能接口可能会有所帮助,但主要是反射或半身像。特别是在您描述问题的方式上。“没有方法用于
void
方法”有点令人困惑。您能详细说明一下吗?要么我误解了您,要么类似于
Consumer getter=MyClass::getMethod()
解决了这个问题。是的,我的意思是没有一个方法接口不带参数也不返回任何内容。我将尝试进行编辑。在您的示例中,
使用者
表示一个带
字符串
参数的方法。“对于不带参数且返回void的方法,没有像示例中那样的接口。”