找到通用类型的 Class 引用
Find the Class Reference Of Genric Type
@Service
public abstract class MainService<E extends AbstractEntity, R extends MainRepository<E>> {
@Autowired
MainRepository<E> repository;
public E find(long id) throws Exception {
return this.repository.find(---, id);
}
}
这里可以找到泛型类型 E 的 class 引用作为第一个参数而不是 - -- ...?
我对实现的期望是创建一个通用调用以避免在所有服务中重复以下代码 classes。
return this.repository.find(Entity.class,id);
是的,这是一个这样做的例子:
import java.lang.reflect.ParameterizedType;
public class Foo {
public static abstract class Bar<E> {
public E returnAnE() throws InstantiationException, IllegalAccessException {
Class e = (Class)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
return (E)e.newInstance();
}
}
public static class Baz extends Bar<String> {
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Baz baz = new Baz();
String s = baz.returnAnE();
}
}
此代码将因 class 与我们此处所用结构不匹配的结构而失败,因此您应该执行实例检查而不是强制转换,并检查数组访问。
@Service
public abstract class MainService<E extends AbstractEntity, R extends MainRepository<E>> {
@Autowired
MainRepository<E> repository;
public E find(long id) throws Exception {
return this.repository.find(---, id);
}
}
这里可以找到泛型类型 E 的 class 引用作为第一个参数而不是 - -- ...?
我对实现的期望是创建一个通用调用以避免在所有服务中重复以下代码 classes。
return this.repository.find(Entity.class,id);
是的,这是一个这样做的例子:
import java.lang.reflect.ParameterizedType;
public class Foo {
public static abstract class Bar<E> {
public E returnAnE() throws InstantiationException, IllegalAccessException {
Class e = (Class)((ParameterizedType)this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
return (E)e.newInstance();
}
}
public static class Baz extends Bar<String> {
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Baz baz = new Baz();
String s = baz.returnAnE();
}
}
此代码将因 class 与我们此处所用结构不匹配的结构而失败,因此您应该执行实例检查而不是强制转换,并检查数组访问。