Java 将类和方法作为参数传递
我正在寻找将Java 将类和方法作为参数传递,java,Java,我正在寻找将类和方法作为参数传递给方法的方法。我想减少重复的代码 我想要这样的东西: public static void methodName(Class C, Method m ) { C.m.sendKeys("item"); } 这可能吗?是的,您可以使用消费者。例如: class MyClass { public static void methodToPass(String arg) {...} } publi
类
和方法
作为参数传递给方法的方法。我想减少重复的代码
我想要这样的东西:
public static void methodName(Class C, Method m ) {
C.m.sendKeys("item");
}
这可能吗?是的,您可以使用
消费者
。例如:
class MyClass {
public static void methodToPass(String arg) {...}
}
public static void methodName(Consumer<String> cons) {
cons.accept("item");
}
这也适用于实例方法,语法如下:
MyClass mc = new MyClass();
methodName(mc::methodToPass);
或者,使用BiConsumer
,在这种情况下,传递的第一个参数必须是调用该方法的实例:
methodName(MyClass::methodToPass);
publicstaticvoidmethodname(双消费者cons){
MyClass mc=。。。;
反对接受(mc,“项目”);
}
只要您调用的方法接受一个您指定为
使用者
的类型参数的参数,这种方法就可以工作
在包中还有其他可用的接口,如
消费者
,用于不同类型的方法。在Java 8中,您可以使用作为lambda传递的方法引用
methodName(C::m);
您需要指定函数的类型(参数和返回值),并使用现有函数接口之一或定义自己的函数接口
例如,如果您的函数返回一个布尔值并将类T的对象作为输入,则可以使用预定义的函数接口谓词:
public static void methodName(Item item, Predicate<Item> p) {
p.test(item);
// ...
}
publicstaticvoidmethodname(Item,谓词p){
p、 试验(项目);
// ...
}
不在java 8中,您也可以在早期版本中传递匿名实现的接口
methodName(C::m);
public static void methodName(Item item, Predicate<Item> p) {
p.test(item);
// ...
}