为什么Gradle / ANT构建在泛型类型转换上失败?

时间:2018-01-23 13:22:07

标签: java eclipse generics gradle ant

假设有一个通用的Query类,它执行db查询并返回映射的对象。

Public class Query
{
    public <T> T getObject(Class<T> type){
    {
          // get the data and build object using reflection

          return T;
    }
}

现在在代码的某个地方,消费&#34;查询&#34;如下所示:

Query q = new Query();
T result = q.<Person>getObject(person.getClass());

这在eclipse环境中编译并运行良好。但在ANT / Gradle构建中失败了。在ANT / Gradle编译期间,java编译器只是忽略泛型类型&lt; T&gt;。在调用方法时传递。并将运行时类型作为参数传递的基线,其中&#34; Class&#34;不是&#34;等级&lt; T&gt;&#34;。并抛出不兼容的类型错误:

  

[javac] Query.java:18:错误:不兼容的类型

     

[javac] T result = q。的getObject(person.gerClass());

     

[javac] ^

     

[javac]要求:T

     

[javac]发现:对象

     

[javac]其中T是一个类型变量:

     

[javac] T扩展在类Query

中声明的Object

但是,如果我转换参数或结果,它会在ANT / Gradle中编译而不会出现任何问题。如下所示。

T result = q.<Person>getObject((Class<T>)person.getClass());

T result = (T) q.<Person>getObject(person.getClass());

我很想知道为什么在eclipse环境中编译好的代码在ANT / Gradle构建中失败了?是否有任何环境或编译时参数强制执行泛型类型检查?

0 个答案:

没有答案