0

Javaのインポートステートメントについては、以下の疑問があります。

    package com.punith.test;
    import **com.punith.test.ClassA**;

    public class ClassA {

    }

上記のコードのように、ClassA を定義しているのと同じクラスをインポートできます。では、コンパイルエラーが警告として修正されるのではなく、なぜ設計者はこれを許可したのでしょうか。

よろしくプニス

4

3 に答える 3

1

これは、未使用のインポートの特殊なケースであり、コンパイル エラーをスローしないのは当然です。未使用のインポートは、実行時にクラスを使用する予定であることを示すコンパイル時の指標であるため、パフォーマンスが低下することはありません。

無意味なコードを作成する方法は無数にあります。それぞれにコンパイル時エラーをスローさせると、コンパイラがかなり複雑になります。開発者の常識的な要素に頼るのが最善であり、常識が通用しない場合 (あまりにも頻繁に) は、危険なコードを最適化してください。

于 2013-07-19T11:28:24.597 に答える
0

あなたの質問にはいくつかの考えがあります。

まず第一に、コンパイラが一部のコード構造を廃止する理由を考えてみましょう。その場合?明らかに、コンパイラ エラーはコードの理解できない部分に関する信号であり、低レベルの命令に正しく変換できないため、JVM で解釈できません。無意味またはばかげているが、実装できる他のすべてのケースは非推奨ではありません。たとえば、Java では無意味なこともたくさんできます。

public void nop() {
    int i;
}

また

for (int x = 0; x < 0; x++);

また

int i = 1;
i = i;

次に、ステートメントについて考えimportたのは、あなたの質問に関するものではありませんが、それに近いものです。import static発言もある。これは、このファイルに記述されている同じクラスの static import が賢明な場合です。たとえば、次のような状況で役立ちます。

package xxx;
import static xxx.TestEnum.Test.*;
public class TestEnum {
    enum Test {
        TEST1,
        TEST2
    }
    public boolean isTest2(Test test) {
        return test == TEST2;
    }
}

このコードでimport static xxx.TestEnum.Test.*は、 のような構造は使用できませんtest == TEST2;。そのようなインポートがなければcompile error、 になり、 に変更する必要がありreturn test == Test.TEST2;ます。

于 2013-07-19T11:27:33.453 に答える