Java 测试双消费者时发生编译错误

Java 测试双消费者时发生编译错误,java,lambda,java-8,Java,Lambda,Java 8,我写了下面的方法,它接受BiConsumer,当我传递方法testBiConsumer(字符串a,字符串b)的方法引用时,我得到一个编译错误,说明: Multiple markers at this line - The method biConsumerTest(String, String, BiConsumer<Object,Object>) in the type Test is not applicable for the arguments (String, St

我写了下面的方法,它接受
BiConsumer
,当我传递方法
testBiConsumer(字符串a,字符串b)
的方法引用时,我得到一个编译错误,说明:

Multiple markers at this line
    - The method biConsumerTest(String, String, BiConsumer<Object,Object>) in the type Test is not applicable for the arguments (String, String, 
     Test::testBiConsumer)
    - The type Test does not define testBiConsumer(Object, Object) that is applicable here
此行有多个标记
-类型测试中的方法biConsumerTest(String,String,BiConsumer)不适用于参数(String,String,
测试::testBiConsumer)
-类型测试没有定义适用于此处的testBiConsumer(对象,对象)
如果我将双消费者从
BiConsumer
更改为
BiConsumer
,效果很好

我如何使下面的代码工作?我希望
publicstaticvoidbiconsumertest(字符串a、字符串b、biconsumerbiconsumer)
是泛型的

public class Test {
        public static void main(String[] args){
            Test.biConsumerTest("A", "B", Test::testBiConsumer);
        }

        public static void biConsumerTest(String a, String b, BiConsumer<Object, Object> biConsumer){
            biConsumer.accept(a, b);
        }

        public static void testBiConsumer(String a, String b) {
            System.out.println(a);
            System.out.println(b);
        }
    }
公共类测试{
公共静态void main(字符串[]args){
Test.biConsumerTest(“A”,“B”,Test::testBiConsumer);
}
公共静态void biConsumerTest(字符串a、字符串b、BiConsumer BiConsumer){
双消费者接受(a,b);
}
公共静态void testBiConsumer(字符串a、字符串b){
系统输出打印项次(a);
系统输出打印ln(b);
}
}

代码看起来有点滑稽,不清楚您实际要实现什么,但要使其通用:

public class Test {
    public static void main(String[] args) {
        Test.biConsumerTest("A", "B", Test::testBiConsumer);
    }

    public static <T> void biConsumerTest(T a, T b, BiConsumer<T, T> biConsumer) {
        biConsumer.accept(a, b);
    }

    public static <S> void testBiConsumer(S a, S b) {
        System.out.println(a);
        System.out.println(b);
    }
}
公共类测试{
公共静态void main(字符串[]args){
Test.biConsumerTest(“A”,“B”,Test::testBiConsumer);
}
公共静态无效双消费者测试(TA、TB、双消费者双消费者){
双消费者接受(a,b);
}
公共静态void testBiConsumer(sa,sb){
系统输出打印项次(a);
系统输出打印ln(b);
}
}
testBiConsumer上的
类型参数毫无意义,与声明
testBiConsumer(对象a,对象b)
相比,它没有添加任何内容。将
biConsumerTest
更改为泛型声明
void biConsumerTest(ta,tb,BiConsumer BiConsumer)
后,您甚至可以保留原始的
testBiConsumer(String a,String b)
,因为编译器可以毫无问题地推断
T
字符串。