You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:18:53