我有这样一个A班:
public class A<T extends Number>
{
....
}在另一个类中,我有这样的方法:
public Hashtable<String, A> createAHashtable()
{
Hashtable<String, A> hTable = new Hashtable<String, A>();
return hTable;
}参数A有一个警告,因为它是泛型类。所以我应该这么做:
public Hashtable<String, A <?>> createAHashtable()
{
Hashtable<String, A<?>> hTable = new Hashtable<String, A<?>>();
return hTable;
}或者这样做:
public Hashtable<String, A <? extends Number>> createAHashtable()
{
Hashtable<String, A<? extends Number> hTable = new Hashtable<String, A<? extends Number>();
return hTable;
}或者…?
编辑:
尝试过这个(如Dilum的建议)
public <T extends Number> Hashtable<String, A<T>> createAHashtable()
{
Hashtable<String, A<T>> hTable =
new Hashtable<String, A<T>>();
A<Float> constraint = new A<Float>();
hTable.put("test", constraint);
return hTable;
}但是“放”我的浮标A是无效的。
也许通配符是最好的选择。
编辑2:
根据Dilum的建议,以下代码(将浮点数A放入Hashtable时转换为A)没有错误,但警告它是不安全的强制转换。为什么我们需要演员?
public <T extends Number> Hashtable<String, A<T>> createAHashtable()
{
Hashtable<String, A<T>> hTable =
new Hashtable<String, A<T>>();
A<Float> constraint = new A<Float>();
hTable.put("test", (A<T>)constraint);
return hTable;
}发布于 2011-09-09 15:59:06
试试这个:
public <T extends Number> Hashtable<String, A<T>> createAHashtable() {
return new Hashtable<String, A<T>>();
}假设您确实想用键值对预填充,请尝试:
public <T extends Number> Hashtable<String, A<T>> createAHashtableWithEntry(String key, T value) {
Hashtable<String, A<T>> ht = return new Hashtable<String, A<T>>();
ht.put(key, new A<T>(value));
return ht;
}发布于 2011-09-09 17:54:31
与编辑2有关:
这里有一个具体的例子,说明为什么这个案子不安全。实际上,在我的IDE中,我甚至没有收到关于转换不安全的警告。
import java.util.ArrayList;
import java.util.List;
public class Genericss {
static <T extends Number> List<A<T>> get2() {
List<A<T>> list = new ArrayList<A<T>>();
A<Float> f = new A<Float>(3.0f);
list.add((A<T>) f); // Compiles... not even a warning on my IDE
return list;
}
public static void main(String[] args) {
List<A<Integer>> l = Genericss.<Integer>get2();
Integer i = l.get(0).get(); // runtime error
A<Float> f = new A<Float>(3f);
//i = (A<Integer>) f; // won't compile
}
public static class A<T> {
T t;
public A(T t) {
this.t = t;
}
public T get() {
return t;
}
}
}https://stackoverflow.com/questions/7364258
复制相似问题