Java 错误:无法将原始构造函数引用与构造函数的显式类型参数一起使用
我有以下几段代码: Main.java 然后更改Java 错误:无法将原始构造函数引用与构造函数的显式类型参数一起使用,java,compiler-errors,Java,Compiler Errors,我有以下几段代码: Main.java 然后更改Main.java,如下所示: public class Main { public static void main(String[] args) { TestProducer<String> c = Test::new; System.out.println(c.produce("Point")); } } 公共类主{ 公共静态void main(字符串[]args){ TestProducer c=T
Main.java
,如下所示:
public class Main {
public static void main(String[] args) {
TestProducer<String> c = Test::new;
System.out.println(c.produce("Point"));
}
}
公共类主{
公共静态void main(字符串[]args){
TestProducer c=Test::new;
系统输出打印(c.PRODUCT(“点”));
}
}
通过这样做,
c::product
将只接受String
s,这符合我对问题3的意图。问题1和2仍然不清楚。您将TestProducer
接口定义为具有通用方法,而不是通用本身:
Test<N> produce(N str);
它必须返回一个测试
,而不是测试
您可能应该在界面上添加N
作为类型参数
TestProducer
根据Product
方法定义提供了一个强制执行的合同,任何不满足该定义的生产者都不能使用TestProducer
,它只接受字符串,那么您需要将绑定更改为
这个答案很有用,因为最后一句话引出了我对第3部分的理解。如果你能回答前两部分,我会接受这个答案。
@FunctionalInterface
public interface TestProducer {
public <N extends CharSequence> Test<N> produce(N str);
}
@FunctionalInterface
public interface TestProducer<N extends CharSequence>
{
public Test<N> produce(N str);
}
public class Main {
public static void main(String[] args) {
TestProducer<String> c = Test::new;
System.out.println(c.produce("Point"));
}
}
Test<N> produce(N str);
TestProducer c = Test::<String>new;
c.produce(new StringBuilder())
TestProducer c = Test::new;
System.out.println(c.produce("Point"));