public interface Pair<K, V>{
K getKey();
V getValue();
}
public class OrderedPair<K, V> implements Pair<K, V>{
private K key;
private V value;
OrderedPair(K k, V v){
key = k;
value = v;
}
public K getKey(){
return key;
}
public V getValue(){
return value;
}
}
public class Main{
public static void main(String[] args){
OrderedPair<Integer, String> myPair = new OrderedPair<>(100, "Imam Bux");
OrderedPair<Integer, String> myPair2 = new OrderedPair<>(101, "Pakistan");
OrderedPair<Integer, String>[] myArray = { myPair, myPair2 };
}
}
问题:我创建了一个由OrderedPair实现的接口Pair,它由Main类实例化两次。 OrderedPair的键和值是指上面的类型参数?
问题:我想创建OrderedPair数组但最终会出现“泛型数组创建”错误。如果我可以使String [] names = {“ABC”,“DEF”};那么为什么不OrderedPair[]
数组?
答案 0 :(得分:0)
Java的创建者不希望您拥有泛型类型的数组。
请参阅http://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#createArrays
因此,您应该转向Java集合,而不是使用数组;例如,您可能正在使用ArrayList&gt;。
这是由于如何在Java中实现泛型这一事实引起的。添加泛型时,语言设计者决定保证源代码级别的向后兼容性。这个决定有几个后果:
ArrayList或其他Collection类型以与泛型兼容的方式重新编写;这对于数组类型来说根本不可能。
对于你的另一个问题:java中没有类似typedef的C ++,所以如果你想避免一直输入OrderedPair,你必须创建一个特定的子类,比如
class MyOrderedPair extends OrderedPair<String, Integer> ...