【发布时间】:2018-02-02 11:29:45
【问题描述】:
我将应用程序 JDK 从 1.6 更新到 1.8,但在 IntelliJ 中保持语言级别 1.6。
更新后,我在 assertThat 语句的某些测试中遇到了编译错误,并检查了对象的类型。代码是这样的:
assertThat((Class) myList.get(0).getMyClassType(), is(equalTo(MySubclass.class)));
myList 看起来像这样:
List<MyClassDefinition> myList = myClassDefinition.getMyClassDefinitions(reader);
MyClassDefinition 和 getMyClassType() 的定义如下:
public class MyClassDefinition {
private Class<? extends MyClass> classType;
public Class<? extends MyClass> getMyClassType() {
return classType;
}
}
而 MySubclass 是 Myclass 的子类:
public class MySubclass extends MyClass {
@Override
public void initialise() {
// some action here!
}
}
MyClass的定义是
public abstract class MyClass extends AnotherClass<AnotherType>{
//Definitions
}
Assert is 和 equals 库的导入是这样的:
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
hamcrest 版本是 hamcrest-all-1-3
将项目 SDK 更改为 jdk 1.8 后,我收到以下错误消息:
Error:(136, 9) java: no suitable method found for assertThat(java.lang.Class,org.hamcrest.Matcher<java.lang.Class<MySubClass>>)
method org.hamcrest.MatcherAssert.assertThat(java.lang.String,boolean) is not applicable
(argument mismatch; java.lang.Class cannot be converted to java.lang.String)
method org.hamcrest.MatcherAssert.<T>assertThat(java.lang.String,T,org.hamcrest.Matcher<? super T>) is not applicable
(cannot infer type-variable(s) T
(actual and formal argument lists differ in length))
method org.hamcrest.MatcherAssert.<T>assertThat(T,org.hamcrest.Matcher<? super T>) is not applicable
(cannot infer type-variable(s) T
(argument mismatch; org.hamcrest.Matcher<java.lang.Class<MySubClass>> cannot be converted to org.hamcrest.Matcher<? super java.lang.Class>))
应用程序是用 Ant 构建的,我们已经将 hamcrest jar 文件添加到类文件中,所以当我们在项目中更改 JDK 时没有任何变化。 所以我的问题是为什么当我使用相同级别的语言(1.6)进行编译时,这段代码可以与 JDK 1.6 一起使用,但不能与 1.8 一起使用?它是否依赖于不同的库?
【问题讨论】:
-
您在这里遗漏了重要的细节。
MyClass是什么样的?myList是什么?taskClass是什么?静态方法assertThat、is和equalTo来自哪些类?请写MCVE。 -
@Michael OK 我添加了信息
-
我希望
initialise()在构造函数中不被调用。 -
@JoopEggen 不,不是,但没关系。正如我所说,我收到编译错误。所以 JDK 1.8 不认为我们这里有正确的语法,但 jdk 1.6 没有问题
标签: junit java-8 java-6 hamcrest