@ryoya828 (Ryoya)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Java 自動でインポート文が追加されてしまう

Q&A

勝手にコンパイルされてしまう

「やさしいJava」を読みながらJavaプログラミングの勉強をしております。
独学で初め約半月ほどとなります。

実行画面でキーボードから数値を入力して値を評価させる勉強をしているのですが、
教材の通りにコードが書けていても実行画面でエラーメッセージが出てきてしまい、何故だろうと見てみると下記インポート文が勝手に出てきておりました。

「import jdk.internal.jshell.tool.resources.version;
import jdk.internal.org.jline.utils.InputStreamReader;」

不思議に思いインポート文を消してみたところエラー表示なく実行することができました。

自動でインポートされてしまう点、このインポートの意味をネットで検索しても自分が理解できる回答に出会えずこちらでご助言をお願いしたく投稿致しました。

■伺いたい点
・何故自動でインポートされてしまうのか
・何故インポート文を消したらエラー無く実行できるのか

発生している問題・エラー

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

        at sample1.main(sample1.java:8)

該当するソースコード

import java .io.*;

import jdk.internal.jshell.tool.resources.version;
import jdk.internal.org.jline.utils.InputStreamReader;


class sample1{
    public static void main(String[] args) throws IOException{

        System.out.println("正方形の辺の長さを入力してください。");

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String str = br.readLine();

        int num = Integer.parseInt(str);

        System.out.println("正方形の面積は"+num+"です。");

    }
}

※上記コードはまだ制作途中となりますのでご了承ください。

0 likes

1Answer

何故自動でインポートされてしまうのか

jdkのライブラリにはjava .io.InputStreamReaderjdk.internal.org.jline.utils.InputStreamReaderが存在するようです。

今回のケースでは、エディタがmainメソッドのInputStreamReaderjdk.internal.org.jline.utilsのものと判別しているため、自動インポートが行われたと推察されます。

これは、インポート文をワイルドカード*で指定していることが原因と考えられます。
したがって、以下のように使うものを明示的に記述してあげるのが良いかと思います。
こうすれば、mainメソッドのInputStreamReaderjava.ioのものであるとエディタが判別できるので自動インポートがされずに済むでしょう。

import java.io.BufferedReader;
import java.io.InputStreamReader;

なお、eclipseの自動インポートの無効化したい場合は以下をご参照してください。

何故インポート文を消したらエラー無く実行できるのか

エラーはインポート文にInputStreamReaderが2つあるため、jdkがどちらのメソッドを参照すればわからず解決できない(Unresolve)と言いたいのでしょう。

したがって、自動インポートされた文を消せばjava.ioInputStreamReaderを問題なく呼び出せるのです。

2Like

Comments

  1. @ryoya828

    Questioner

    @paper様
    ご回答いただき有難う御座います。
    理由の他に解決方法までご教示いただき理解できました!

    以後注意して勉強を進めていきます!

Your answer might help someone💌