如何不允许类型推断并要求在方法调用上使用显式类型?

时间:2019-06-12 16:23:48

标签: java generics type-inference

我目前正在建立一个具有结对结构的课程。我想以某种方式保证该对中的每个成员都具有完全相同的类型。

我的问题指向:How type inference work for method calls?

以下代码说明了我的问题:

public class MyClass {    
    public class MyPair<E> {
        private E oldObj;
        private E newObj;

        MyPair(E pOldObj, E pNewObj) {
            oldObj = pOldObj;
            newObj = pNewObj;
        }
    }
    public class MyObject {
        List<MyPair<?>> listWithPairs = new ArrayList<>();

        public <T> void addPair(T oldObj, T newObj) {
            listWithPairs.add(new MyPair<T>(oldObj, newObj));
        }
    }

    public static void main(String[] args) {
        MyObject pairHolder = new MyObject();
        pairHolder.addPair(12L, "asdf");//Call 1
        pairHolder.<Long>addPair(12L, 12L);//Call 2
    }
}

Java中是否有一种方法可以使Call 1变得不可能,并且总是像Call 2中一样要求类型规范?

1 个答案:

答案 0 :(得分:0)

也许通过这样声明您的方法

public <T extends Number> void addPair(T oldObj, T newObj) {
        listWithPairs.add(new MyPair<T>(oldObj, newObj));
}