Java Generics&退货类型

时间:2014-05-20 06:59:31

标签: java generics

我很好奇你是如何在没有强制转换的情况下从函数返回通用数据类型的。似乎泛型的全部意义在于消除了使用集合进行强制转换的需要以及由此产生的编译时错误。

然而,有一种方法可以说这个签名:

public E get( K key )

我不能在没有从另一种类型进行强制转换的情况下返回类型E,例如return (E) "test";

这不会破坏使用泛型的整个目的吗?我在这里想念的是什么如何返回E类型的变量?

2 个答案:

答案 0 :(得分:0)

当“类”中指定的对象类与类类或方法本身提供的功能无关或几乎没有任何关系时,泛型用于提高类和/或方法的重用率。

最好的示例是数据结构,其中通用类型为黑盒。你不关心它们,只是以某种方式聚合它们,重要的是你如何索引,排序,查找,遍历......这个对象。

您提议的案例(return (E) "test";)违反了该原则,因为您正在构建其中一个对象,因此您需要了解其类详细信息。

想象一下,您想提供一个表示对象对的类。您根本不关心这些对象的性质,您只想提供一种对对象引用进行分组的方法。这是使用泛型类型的典型案例:

public class  Pair<T,S> {

    public T getFirst() {
        return first;
    }

    public void setFirst(T first) {
        this.first = first;
    }

    public S getSecond() {
        return second;
    }

    public void setSecond(S second) {
        this.second = second;
    }

    private T first;
    private S second;
}
除了聚合它们之外,

配对与firstsecond无关。

答案 1 :(得分:0)

是的,你可以使用泛型来做到这一点。这是一个示例代码:

public class Sample<E,K>{
Map<K, E> map = new HashMap(){{
    put("key", "value");
}};
public static void main(String[] args) {
    Sample<String,String> sample = new Sample<String,String>();
    String val = sample.get("key");
    System.out.println(val);
}

public  E get( K key ) {
    E e = map.get(key);
    return e;

}
}