java中泛型方法之间的差异

时间:2016-02-01 16:16:45

标签: java oop generics methods generic-programming

假设我有这个界面:

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女巫是查找。

2 个答案:

答案 0 :(得分:3)

process()方法中找不到差异,它在调用者中找到。当您指定Lookup<?>时,您放弃任何编译时类型检查的机会,而如果您使用第二种方法,则table必须匹配T extends Lookup<S>。你至少对编译器遇到问题有一些希望。

答案 1 :(得分:0)

  1. table.find将返回T,如果不是String,则需要将其转换为字符串:

    的System.out.println(table.find(名称)的ToString());

  2. 对我来说没什么意义,