Java泛型接口与类实例化报错,寻求技术协助
解决你的泛型类实例化错误问题
嘿,我一眼就看出问题所在啦!你在实例化c11<Integer>的时候传了参数x,但你的c11类里根本没有定义带参数的构造方法,这才导致了编译错误。
问题根源
Java的规则是:如果一个类没有显式定义任何构造方法,编译器会自动给它生成一个无参的默认构造方法。但你的c11类目前只实现了接口的方法,没有自定义构造方法,所以它只有默认的public c11() {}。而你写的new c11<Integer>(x)要求类有一个接受Integer类型参数的构造方法,编译器找不到匹配的,自然就报错了。
两种解决办法
办法一:给c11类添加带参数的构造方法
如果你确实需要在实例化时传入参数,那就显式定义一个构造方法:
public interface I1 <A> { public void display1(A x); } public class c11<A> implements I1<A> { // 新增带参数的构造方法 public c11(A param) { // 这里可以根据需求处理参数,比如存为类的成员变量 } @Override public void display1(A x) { System.out.println(x + " is of type " + x.getClass()); } }
这样你原来的实例化代码就能正常运行了:
int x = 5; c11<Integer> s1 = new c11<Integer>(x); s1.display1(x);
办法二:使用无参构造实例化
如果你不需要在构造时传参数,直接用默认的无参构造就行,甚至可以用Java的菱形语法简化代码:
int x = 5; c11<Integer> s1 = new c11<>(); // 菱形语法会自动推断泛型类型 s1.display1(x);
额外小提示
如果你以后给类定义了带参数的构造方法,同时还需要无参构造,一定要显式写出无参构造方法,否则编译器不会再自动生成它哦。
内容的提问来源于stack exchange,提问作者Melanie A
相关产品推荐
相关产品推荐

