假设我有这个界面:
public interface Lookup<T> {
public T find(String name);
}
以下方法之间是否存在差异?
1)
public void process(String name, Lookup<?> table) {
System.out.println(table.find(name));
}
2)
public <S,T extends Lookup<S>> void process(String name, T table) {
System.out.println(table.find(name));
}
在我使用的第一种方法中,&#39;?&#39;所以我可以在Lookup中使用任何类型,在第二个我使用T和S所以S所以我也可以使用任何类型的T女巫是查找。
答案 0 :(得分:3)
在process()
方法中找不到差异,它在调用者中找到。当您指定Lookup<?>
时,您放弃任何编译时类型检查的机会,而如果您使用第二种方法,则table
必须匹配T extends Lookup<S>
。你至少对编译器遇到问题有一些希望。
答案 1 :(得分:0)
table.find
将返回T
,如果不是String,则需要将其转换为字符串:
的System.out.println(table.find(名称)的ToString());
对我来说没什么意义,