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