Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型返回参数类型的泛型列表_Java_Generics - Fatal编程技术网

Java泛型返回参数类型的泛型列表

Java泛型返回参数类型的泛型列表,java,generics,Java,Generics,我想创建以下内容: //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 } //从参数

我想创建以下内容:

//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
}
//从参数推断类型,但将其限制为以下类型之一
//代理的子类型。返回此子类型的列表
公共静态列表进程(代理)
{
返回新的ArrayList();//仅举个例子
}
用法:

List<ConcreteTypeOfProxy> list = process(new ConcreteTypeOfProxy());
List List=process(新的ConcreteTypeOfProxy());
上面的示例存在编译问题。我认为这在java中应该在逻辑上是可用的,只是不确定语法是什么
//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;
}
公共静态列表进程(T代理) { 返回新的ArrayList();//仅举个例子 } //返回具有T类型参数的数组 公共静态列表进程(T代理) { 返回新的ArrayList();//仅举个例子 } //返回在方法中定义的泛型类型的映射 公共静态映射过程(T键,E值) { Map Map=newhashmap(); map.put(键、值); 返回图; }
执行此操作不需要任何方法,因此也不需要任何参数:

List<ConcreteTypeOfProxy> list = new ArrayList<>();
List List=new ArrayList();
记住:
ArrayList
ArrayList
之间没有区别:它只是一个
ArrayList


type参数只是一条指令,用于编译器检查所添加内容的类型(仅在编译时),并自动转换从列表中获得的值。

应该是
公共静态列表进程(T proxy)
确定。我必须在返回类型之前添加类型限制。收到了,谢谢。但是请注意,上面的内容不适用于
List List=process(new SubscriberProxy())
用法(因为
t
对于返回列表类型和方法参数必须相同)。所以它应该是
List=process(newconcreteTypeOfProxy())(或者两者都必须是
SubscriberProxy
)谢谢,但既然欧内斯特先回答了,我就把它给他:)是的,我同意事实上我没有看到评论,我只是在IDE中键入代码,然后发布到这里。:)我不清楚为什么这比直接使用
new ArrayList()
更好。我已经添加了map的示例,我知道这就是为什么我提到我在方法中所做的只是一个示例。这将作为api公开,我将在该方法中做额外的工作。:)