Java:在函数接口中通过反射调用方法
有人知道我是否可以通过在函数接口体中的反射来调用方法吗 我想返回一个谓词。因此,典型的语法是Java:在函数接口中通过反射调用方法,java,reflection,interface,functional-programming,Java,Reflection,Interface,Functional Programming,有人知道我是否可以通过在函数接口体中的反射来调用方法吗 我想返回一个谓词。因此,典型的语法是 Predicate<Data> pred = data -> data.getVar1().equals("foobar"); 谓词pred=data->data.getVar1().equals(“foobar”); 但是在我的特例中,由于类和方法是变量,所以它们都不知道要调用 所以我想得到这样的东西: Method method = Class.forName("Data").
Predicate<Data> pred = data -> data.getVar1().equals("foobar");
谓词pred=data->data.getVar1().equals(“foobar”);
但是在我的特例中,由于类和方法是变量,所以它们都不知道要调用
所以我想得到这样的东西:
Method method = Class.forName("Data").getMethod("getVar1", (Class[]) null);
Predicate<T> pred = data ->
((String) method.invoke(data, (Object[]) null)).equals("foobar");
Method=Class.forName(“数据”).getMethod(“getVar1”),(Class[])null;
谓词pred=数据->
((String)method.invoke(data,(Object[])null)).equals(“foobar”);
但Eclipse说:“未处理异常”。所以我用try-catch来包围它,但是Eclipse已经显示了相同的消息
有人能给我一些线索吗?试试这个:
Predicate<T> pred = data -> {
try {
return ((String) method.invoke(data, (Object[]) null)).equals("foobar");
} catch (IllegalAccessException illegalAccessException) {
//
} catch (IllegalArgumentException illegalArgumentException) {
//
} catch (InvocationTargetException invocationTargetException) {
//
}
return false;
};
谓词pred=data->{
试一试{
return((String)method.invoke(data,(Object[])null)).equals(“foobar”);
}捕获(IllegalAccessException IllegalAccessException){
//
}捕获(IllegalArgumentException IllegalArgumentException){
//
}捕获(InvocationTargetException InvocationTargetException){
//
}
返回false;
};
enclosure method.invoke to method=)动态加载的类Data
和编译时类型T
之间的关系是什么?如果一个函数期望它的参数是Data
类型,那么它声称接受t
类型的参数,这看起来是不对的。String
的转换已经过时,您可以简单地调用equals
,因为该方法已经在对象中定义。此外,捕获将覆盖所有必要的已检查异常的ReflectiveOperationException
就足够了。另外,请注意调用的varargs性质;您可以简单地说method.invoke(data)
。把它们放在一起:Predicate pred=data->{try{return method.invoke(data.equals(“foobar”);}catch(ReflectiveOperationException ex){throw new AssertionError(ex);}}
问题是关于未处理的异常。我接受了topic starter的片段。