Spring 3.2.5→4.0.0のバージョンアップ後にソースをコンパイルしようとすると、私は奇妙な動作をします。Spring4 MVCユニットテストがコンパイルされない
不良コードスニペットからApplicationControllerTest.java
(それはdocumentationからのコードと同等です):
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
...
@Autowired
private WebApplicationContext wac;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
エラー:
COMPILATION ERROR : /C:/Development/.../war/src/test/java/org/.../web/controller/ApplicationControllerTest.java:[59,61] C:\Development\...\war\src\test\java\org\...\web\controller\ApplicationControllerTest.java:59: incompatible types; inferred type argument(s) java.lang.Object do not conform to bounds of type variable(s) B found : <B>org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder<B> required: java.lang.Object
1はMockMvcBuilders
源に見える場合は、1が違いを見ることができます:
スプリング4.0.0:
public static <B extends DefaultMockMvcBuilder<B>> DefaultMockMvcBuilder<B> webAppContextSetup(WebApplicationContext context) {
return new DefaultMockMvcBuilder<B>(context);
}
春3.2.5:
public static DefaultMockMvcBuilder<DefaultMockMvcBuilder<?>> webAppContextSetup(WebApplicationContext context) {
return new DefaultMockMvcBuilder<DefaultMockMvcBuilder<?>>(context);
}
それがコンパイル可能にする私の試みは成功しませんでした。
Spring documentationは、フレームワークはJava 1.6.0_10と互換性があると言います。私はJava 1.6.0_45を使用します。
彼らは境界を持つ型パラメータの無制限のワイルドカードの種類を切り替えるように見えます。私はあなたが問題を明らかにしたかもしれないと思う。 –
はい、私は変更を見て、彼らは意味をなさないようです。コンパイラがこのパラメータ化に対処できない理由と、JDK 1.6.0_45(またはその他の1.6.xバージョン)を回避する方法を理解できません。 –