This question already has answers here:
How to write a generic method that takes two arguments of the same types in java?

(3个答案)


去年关闭。





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

我的问题朝向: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中那样的类型规范?

最佳答案

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

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

07-24 09:46
查看更多