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

然后更改
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
作为类型参数

  • 从构造函数周围移除类型见证。即使在Java8中也不起作用

  • 无论如何,您不需要提供类型见证
    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"));