0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

javacだとエラーにならないが、ECJだとエラーになることがあるらしい

Posted at

この記事を書くに至った経緯

Java8 + Spring Bootで書かれたプログラムを、IntelliJ IDEAで開いて編集していた。
しかし、話題のAIエディタCursorを使用したくて、同じプログラムをCursor(VSCode)で開いてみた。
すると、なぜか大量のエラーが発生し、コンパイルできなくなった。
原因を探るのに1日溶かしてしまったので、戒めとして投稿する。

エラーが起こったコード

要約すると、以下のようなコードである。

package com.example;

import java.util.List;

public class ServiceImpl<V> implements IService<V> {
    // 他のメンバ

    // IntelliJでは警告になるが、Cursor(VSCode)だとコンパイルエラーになる個所
    public List<?> voList(List list) {
        return null;
    }
}

interface IService<V> {
    List<V> voList(List<V> list);
}

上記コメントの通り、問題はpublic List<?> voList(List list)の部分である。
IntelliJだと警告が出るだけで、問題なくビルドできるのだが、Cursorだとエラーになり、ビルドできない。
本来、上記コードのList<?>List<V>Listとすれば問題ないのだが、上記コードはclassファイルとなっており、編集できなかった。
そのため、コードを編集することなく、エディタ側の何かしらの設定をいじって対応できないかと考えた。

原因

結論から言うと、この現象はどうやらコンパイラーの違いに起因するらしい。
IntelliJでは標準でjacacが使われているのに対し、Cursor(VSCode)ではEclipseと同じECJが使用される。
javacだと上記コードは警告で済むのに対し、ECJではエラーと判定される、ということらしい。
Cursor(VSCode)でもjavacを使えるようにできるが、JDK23以上でないといけないらしい。
そのため、Java8(JDK1.8)の今回のプロジェクトではCursor(VSCode)でjavacを使うことはできないようだ。

結局どうしたか

Cursorは使用したいが、Cursorからだとコンパイルはできない。
そのため、Cursorで編集しつつ、実行するときはIntelliJを使う、という方針に落ち着いた。
Cursorでファイルを編集するタイミングでビルドが走ってしまうので、IntelliJでリビルドをしてからでないと実行できないというのが面倒だが、現状だと他にどうしようもなさそうだ。

参考文献

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?