我想创建以下内容:
//infer the type from parameter but restrict it to one of
// Proxy's subtype. return a list of this sub type
public static List<T> process(<T extends Proxy> proxy)
{
return new ArrayList<T>(); //just for example
}
用法:
List<ConcreteTypeOfProxy> list = process(new ConcreteTypeOfProxy());
以上示例存在编译问题。我认为逻辑上应该在Java中可用,只是不确定语法是什么
答案 0 :(得分:3)
//Any array that extends T
public static <T extends Proxy> List<T> process(T proxy)
{
return new ArrayList<T>(); //just for example
}
//Returns array that has T type of parameter
public static <T> List<T> process(T proxy)
{
return new ArrayList<T>(); //just for example
}
//Returns a map of generic type which you define in the method
public static <T, E extends Proxy> Map<T, E> process(T key, E value)
{
Map<T, E> map = new HashMap<T, E>();
map.put(key, value);
return map;
}
答案 1 :(得分:0)
您不需要任何方法,因此您不需要任何参数即可:
List<ConcreteTypeOfProxy> list = new ArrayList<>();
请记住:ArrayList<ConcreteTypeOfProxy>
和ArrayList<AnyOtherType>
之间没有区别:它只是一个ArrayList
。
type参数仅是指示编译器检查添加的类型的指令-仅在编译时-并自动强制转换从列表中获取的值。