在泛型类中运行时冲突的构造函数

时间:2017-08-09 10:32:10

标签: java generics

正在使用具有两个构造函数

的泛型类处理简单的事情
public class GenericObject<M> {

    private String string;
    private M generic;

    public GenericObject(String string) {
        this.string = string;
    }

    public GenericObject(M generic) {
        this.generic= generic;
        this.string = "default";
   }

}

然后在某一点我需要GenericObject<String>

GenericObject<String> obj = new GenericObject<>("randomString");

我稍后在调试时发现正在使用String构造函数而不是预期的泛型构造函数。

我可以改变,但是我想要这个课程,所以修复它不是问题,但我想知道是否有办法提示在运行时使用哪种构造函数

1 个答案:

答案 0 :(得分:3)

让我们看一下字节码:enter image description here

由于类型擦除,第二个构造函数变为public GenericObject(Object generic),并且用户Kayaman和Tim Biegeleisen说,StringObject更具体,因此第一个构造函数被调用。 / p>