NutzCN Logo
问答 nutz-1.b.47 Mirror.getTypeParam() 使用jdk1.8 编译时出错
发布于 144天前 作者 sakyawang 73 次浏览 复制 上一个帖子 下一个帖子
标签:

编译环境

gradle JavaCompile
jdk1.8

代码

public abstract class NodeService<T extends NodeInterface>{
private Mirror<T> mirror;
public NodeService() {
		try {
			Class<T> entryClass = (Class<T>) Mirror.getTypeParam(getClass(),0);
			mirror = Mirror.me((Class)NodeInterface.class);
		}
		catch (Throwable e) {
			log.warn("!!!Fail to get TypeParams for self!", e);
		}
	}
}

错误日志

E:\environment\ideaworkspace\csaserver\build\compile\com\cloudmap\csmc\kernel\asset\service\group\NodeGroupService.java:69: 错误: 不兼容的类型: Class<Object>无法转换为Class<T>
			Class<T> entryClass = (Class<T>) Mirror.getTypeParam(getClass(),0);
			                                                    ^
  其中, T是类型变量:
    T扩展已在类 NodeGroupService中声明的NodeInterface
3 回复
Class<T> entryClass = (Class) Mirror.getTypeParam(getClass(),0);

正解,多谢!
ps:
ecj编译正常,是因为ecj会自动做类型推导么?

不清楚,也许是泛型的规则有点差异吧

添加回复
请先登陆
回到顶部