2 回答
TA贡献1854条经验 获得超8个赞
您可以使用反射,但不能输入安全。根据对象的运行时间,您可以调用特定的方法。
import java.lang.reflect.Method;
try
{
Object f1 = new Foo();
Object f2 = new Bar();
Class c1 = f1.getClass();
Class[] param = new Class[1];
param[0] = String.class;
Method method;
method = c1.getDeclaredMethod("meth", param);
method.invoke(f1, "$$$$$$$$$$$$$$");
} catch (NoSuchMethodException | SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
TA贡献1825条经验 获得超4个赞
在Java 8或更高版本中,可以使用方法引用。
Foo myFoo = ...;
Bar myBar = ...;
Consumer<String> fn1 = myFoo::meth;
Consumer<String> fn2 = myBar::meth;
将适当的传递Consumer<String>到您要调用该方法的地方。
Consumer<String>适用于具有一个字符串参数且没有返回类型的方法。如果您的方法签名不同,那么还有许多其他功能接口可能会更好地匹配。
给定a Consumer<String> fn,您可以使用调用引用的方法fn.accept("abc")。
添加回答
举报