java泛型 问题
额。。。java泛型的复杂性简直出人意表。中间种种错综复杂的转型和匹配关系简直要人命啊。。。刚写出了如下的出错代码,实在自己不想去翻关于泛型的资料了。。。还求各高手拔刀相助!!
出错 代码如下:
import java.util.*;
import java.lang.reflect.*;
public class Holder<T> {
private T value;
public Holder(){}
public Holder(T val){value = val;}
public void set(T val){value = val;}
public T get(){return value;}
public boolean equals(Object obj){
return obj.equals(value);
}
}
public class Chapter29 {
static void test(Holder<List<?>> holl){
}
public static void main(String[] args){
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(1));
List<Holder<Double>> lh = new ArrayList<Holder<Double>>();
lh.add(new Holder<Double>(0.1));
Holder<List<Integer>> hl1 = new Holder<List<Integer>>(li);
Holder<List<Holder<Double>>> hld= new Holder<List<Holder<Double>>>(lh);
test(hl1);//报错
test(hld);//报错
}
}
想请问各位,上面的代码,倒数三四行报错。为什么通用符在这里不能成功匹配?
而下面的代码却可以:
public class Wildcards {
static void unboundedArg(Holder<?> holder,Object arg){
Object obj = holder.get();
}
public static void main(String[] args){
Holder raw = new Holder();
Holder<Long> qualified = new Holder<Long>();
Holder<?> unbounded = new Holder<Long>();
Holder<? extends Long> bounded = new Holder<Long>();
Long lng = 1l;
unboundedArg(raw,lng);
unboundedArg(qualified,lng);
unboundedArg(unbounded,lng);
unboundedArg(bounded,lng);
}
}
还有就是:如果有做服务器端的前辈从这里路过,能否指点一下java做服务器端,新手该是怎样的一个学习路线??十分感谢。。。 java泛型
[解决办法]
第一个类没不用修改,主要问题应该在第二个类上面,下面是我修改的代码
public Holder<? extends List<?>> test(Holder<? extends List<?>> holl) //修改的地方
{
return holl;
}
public Holder<?> test(Holder<?> holl) //修改的地方
{
return holl;
}