是否可以在不使类通用的情况下制作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>());
}
}
答案 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);