我目前正在建立一个具有结对结构的课程。我想以某种方式保证该对中的每个成员都具有完全相同的类型。
我的问题指向: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中一样要求类型规范?
答案 0 :(得分:0)
也许通过这样声明您的方法
public <T extends Number> void addPair(T oldObj, T newObj) {
listWithPairs.add(new MyPair<T>(oldObj, newObj));
}