作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试用 Java 做这样的事情:
public static <T> T foo() {
return (T) bar(T);
}
public static Object bar(Class<?> klaz) {
return klaz.newInstance();
}
但是代码无法编译,因为我不能用 T 代替 Class
。
使用具体的类,我可以像这样调用 bar:
bar(ConcreteClass.class);
但同样不适用于T。即没有 T.class
这样的东西在 C# 中,typeof 适用于具体类型和模板类型。所以,对 bar 的调用应该是:
bar(typeof(T));
但是我没能在 Java 中找到任何类似的东西。
我是不是遗漏了什么,或者 Java 没有办法获取模板参数的类型?如果 Java 没有这种设施,是否有任何解决方法?
最佳答案
无法获取类型。 Java 的泛型使用类型删除,因此即使 java 本身在运行时也不知道 T 是什么。
至于解决方法:您可以将 foo 定义为采用 Class<T>
类型的参数然后使用它。
关于java - 有没有办法在 Java 中找到模板(通用)参数的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1353901/
我是一名优秀的程序员,十分优秀!