Java 17から21にアップグレードする

Java 21がリリースされたので、自前のプログラムをJava 21に変更してみる。

コードの変更部分

Java 21に変更したら下記のコードが非推奨になっていた。

new Locale(locale)
new URL(referer)

それぞれ下記の通り修正した。

Locale.of(locale)
URI.create(referer).toURL()

newするようなコードは今後もなくなっていくのだろうか。個人的には変更後のコードの方が好きだ。

2023/10/17 追記

pom.xmlに下記設定を追記した。

-proc:full

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.11.0</version>
    <configuration>
        <compilerArgs>
            <arg>-parameters</arg>
            <arg>-proc:full</arg>
        </compilerArgs>
    </configuration>
</plugin>

-XX:+EnableDynamicAgentLoading

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>3.1.2</version>
    <configuration>
        <reuseForks>false</reuseForks>
        <argLine>${argLine} -XX:+EnableDynamicAgentLoading -Dcatalina.base=${project.build.directory}</argLine>
    </configuration>
</plugin>
2023/10/18 追記

Java 21にコンパイルの設定を変更すると、なぜか下記11行目ががコンパイルエラーになる。(一部抜粋)

import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class NovelProcessTest {

    @Mock
    private MessageSourceAccessor messages;

    @Test
    void testExecute() {
        when(messages.getMessage(anyString())).thenReturn(

下記のように修正するとコンパイルエラーは解消する。理由はわからない。

import static org.mockito.Mockito.*;

@ExtendWith(MockitoExtension.class)
class NovelProcessTest {

    @Mock
    private MessageSourceAccessor messages;

    @Test
    void testExecute() {
        String msg = messages.getMessage(anyString());
        when(msg).thenReturn(

下記でもコンパイルエラーは解消するので、whenがメソッドの最初にあるのが駄目なのだろうか。

    @Test
    void testExecute() {
        String msg = "";
        when(messages.getMessage(anyString())).thenReturn(

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です