求助一个关于构造函数的泛型约束不起作用的问题

一脸懵逼的码农 发布于 09/14 17:31
阅读 99
收藏 0

废话不说,直接上代码:

/**
 * 随便定义一个bean
 */
@Data
public class Customer {
    private Long id;
    private String name;
    private Integer gender;
}

/**
 * 随便定义一个接口
 */
public interface BaseInterface {
    String getInfo();
}

/**
 * 定义一个泛型类 该泛型约束为必须要实现 上面定义的 BaseInterface 接口
 */
public class DataInfo<T extends BaseInterface> {
    private Iterable<T> list;

    public DataInfo(Iterable<T> list) {
        this.list = list;
    }

    public static <T extends BaseInterface> DataInfo getInstance(Iterable<T> list){
        DataInfo dataInfo = new DataInfo(list);
        return dataInfo;
    }
}

/**
 * 主方法测试类
 */
public class Main {
    public static void main(String[] args){
        List<Customer> list = new ArrayList<>();
        DataInfo dataInfo1 = new DataInfo(list);
        DataInfo<BaseInterface> dataInfo2 = DataInfo.getInstance(list);
    }
}

就简单的三个类和一个接口,没什么复杂的。最后的main方法编译的时候。dataInfo1不报错,dataInfo2提示不符合约束条件。

DataInfo dataInfo1 = new DataInfo(list);//此处应该也要编译错误的,但是实际却并没有
DataInfo<BaseInterface> dataInfo2 = DataInfo.getInstance(list);//提示不符合约束条件 

正常来说第一个应该也要报错的,为啥第一个的构造函数约束条件不起作用了呢?

有没有大佬能帮我解答下这个问题。

加载中
0
颜文
颜文

java编译器对于范性校验没那么严格。第二个地方报错,是因为你在这个方法上,申明了参数必须是BaseInterface的子类的list。而你的构造器没有这种声明

一脸懵逼的码农
一脸懵逼的码农
构造器应该要遵循该类的定义啊. 泛型类的定义不就是给构造器用的么.
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部