是否可以使方法通用而不使类通用返回List <t>

时间:2016-04-29 07:04:57

标签: java generics generic-list

是否可以在不使类通用的情况下制作Generic方法? 无论如何使用泛型类型实现以下目标?

下面的代码没有编译,这只是为了展示我想要实现的目标。

public class Test {

    public List<T> execute(String name, Map<String, Object> params,   List<T> type) {
          List<Object> emps = new ArrayList<Object>();
          emps.add(new Employee());
         //emps object will be generated dynamically 
         return (List<T>)emps;
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.execute("testing", null, new ArrayList<Employee>());
    }
}

3 个答案:

答案 0 :(得分:3)

是的,您可以通过使用<T>表示法将方法声明为通用方法,将方法定义为非泛型类中的通用方法。

简单地将方法签名更改为:

public <T> List<T> execute(String name, Map<String, Object> params, List<T> type)

该方法将返回List类型的通用T对象。

答案 1 :(得分:2)

试试这个:

public <T> List<T> execute(String name, Map<String, Object> params, List<T> type) {
    List<Object> emps = new ArrayList<Object>();
    emps.add(new Employee());
    //emps object will be generated dynamically
    return (List<T>) emps;
}

看看这个解释:

  

Java编译器利用目标类型来推断类型   泛型方法调用的参数。目标类型   expression是Java编译器所期望的数据类型   在表达式出现的位置。考虑一下方法   Collections.emptyList,声明如下:

     

static <T> List<T> emptyList();请考虑以下任务   语句:

     

List<String> listOne = Collections.emptyList();此声明是   期望List<String>;这个数据类型的实例是目标   类型。因为方法emptyList返回类型为List<T>的值,   编译器推断类型参数T必须是值String。   这适用于Java SE 7和8.或者,您可以使用   输入见证并指定T的值如下:

     

List<String> listOne = Collections.<String>emptyList();

https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html

答案 2 :(得分:0)

尝试以下它应该工作

$patent = Patent::find($patent->id);