[英]Java generics: the type parameter T is hiding the type T
為什么Java編譯器在“翻譯”方法中給我“類型參數T隱藏類型T”?
public static interface Translator<T, E> {
E call(T t);
}
public static <T, E> List<E> translate(List<T> l, Translator<T, E> t) {
..
}
如果我刪除類型參數T
public static <E> List<E> translate(List<T> l, Translator<T, E> t)
警告消失了,但現在我不能
List<Long> l = new ArrayList<>();
List<String> r = translate(l, new Translator<Long, String>() { .. })
導致它給我這個錯誤
The method translate(List<T>, GFn.Translator<T,E>)
in the type GList is not applicable for the arguments
(List<Long>, new GFn.Translator<Long,String>(){})
我正在使用以下代碼,但未收到任何警告消息:
public class Main {
public static interface Translator<T, E> {
E call(T t);
}
public static <T, E> List<E> translate(List<T> l, Translator<T, E> t) {
List<E> result = new ArrayList<E>();
for (T item: l) {
result.add(t.call(item));
}
return result;
}
public static class TranslatorImpl implements Translator<Long, String> {
@Override
public String call(Long aLong) {
return String.valueOf(aLong);
}
}
public static void main(String[] args) throws IOException {
List<Long> items = new ArrayList<Long>();
items.add(10L);
items.add(20L);
items.add(30L);
System.out.println(translate(items, new TranslatorImpl()));
}
}
我使用了JDK 1.7,下面的代碼可以正常工作:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
interface Translator<T, E>
{
E call(T t);
}
class LongToStringTranslator implements Translator<Long, String>
{
@Override
public String call(Long t)
{
return t.toString();
}
}
public class Main
{
public static <T, E> List<E> translate(List<T> l, Translator<T, E> t)
{
List<E> e = new ArrayList<>();
for (T item : l) {
e.add(t.call(item));
}
return e;
}
public static void main(String[] args)
{
List<Long> l = Arrays.asList(1L, 2L);
List<String> s = translate(l, new LongToStringTranslator());
System.out.println(s);
}
}
抱歉,這是我的一個錯誤,問題出在那個錯誤的函數之后:
public static void walk(Iterable<T> list, Walker<T> walker)
如果我更正,這可能會缺少T型參數
public static <T> void walk(Iterable<T> list, Walker<T> walker)
所有警告都會在我的課程中的所有其他方法中消失。
謝謝大家,對不起。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.