Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将类和方法作为参数传递_Java - Fatal编程技术网

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);
    // ...
}