SomeInterface <someclass <a,b =“”>&gt; Java - 如何正确使用这种结构?

时间:2017-06-13 19:22:43

标签: java generics construction

首先,我有以下课程:

public class Pair <K, V> {
public K key;
public V value;

public Pair (K key, V value){
    this.key = key; this.value = value;
}}

和界面:

public interface Generator <T> {
public T next ();}

Class MapData有两个参数,并扩展了LinkedHashMap。

public class MapData <K, V> extends LinkedHashMap <K, V>

班级有一个结构者:

public MapData (Generator <Pair<K, V>> gen, int size){
    for (int i=0; i!=size; i++){
        Pair <K, V> p = gen.next();
        put (p.key, p.value);
    }}

和一种方法(我如何理解这种方法就像适配器一样):

public static <K, V> MapData <K, V> map (Generator <Pair<K, V>> gen, int size){
    return new MapData (gen, size);
}

所以...我想知道如何正确使用这种结构? 例如:

public static void main (String [] args){
    System.out.println(new Pair <String, Integer>(), 10); // Doesn't work at all...
}

3 个答案:

答案 0 :(得分:0)

这样:

System.out.println(new Pair <String, Integer>(), 10);

不是workng,因为没有重载方法println采用2个args ...

你的意思是肯定的

    String key = "myString";
    int value = 121;
    System.out.println(new Pair<>(key, value));

或旧的Java版本

    String key = "myString";
    int value = 121;
    System.out.println(new Pair<String, Integer>(key, value));

答案 1 :(得分:0)

不确定你是否编写了对类,但第一个问题是你的print语句没有正确地声明一对。如果您没有默认构造函数,您实际上必须发送实际值。尝试类似:

System.out.println(new Pair <String, Integer>("example", 1));

答案 2 :(得分:0)

这样的事情:

System.out.println(map(new Generator<Pair<String, Integer>>() {
    public Pair<String, Integer> next() {
        // generate a new Pair as you see fit, for example
        return new Pair<String, Integer>("foo", 0);
    }
}, 10));