我有这样的代码:
protected <T> T doSomething(String someParam, Class<T> clazz) {
...
}
我在 TestCase 类中使用:
Class clazz = MyClass.class;
MyClass MyClass = someObject.doSomething(someString, clazz);
此代码在 eclipse 中给出警告:
类是原始类型。对泛型类的引用应该被参数化
和
此行有多个标记
- 类型安全:MyClass 类型的通用方法 doSomething(String, Class) 的未经检查的调用 doSomething(String, Class)
- 类型安全:Class 类型的表达式需要未经检查的转换以符合 Class
当我在 Eclipse 中运行此代码(测试)时 - 一切正常。当我通过命令提示符通过“mvn clean install”执行此操作时,我得到:
C:\pathToProject\src\test\java\packagesPath\MyTestCase.java:[xx,xxx] 发现不兼容的类型:
java.lang.Object
required: com.somePackagePath.MyClass
但是在提供时:
Class<MyClass> clazz = MyClass.class;
MyClass MyClass = someObject.doSomething(someString, clazz);
我没有收到任何错误或警告。.
我知道 java 编译器会删除类型 info,所以:
eclipse 不应该提供编译器错误而不是警告,还是 maven-plugin-compiler 造成问题?
maven插件是:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<showDeprecation>false</showDeprecation>
<debug>true</debug>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
亲切的问候,
暴君