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
的字符串。