1. ホーム
  2. java

[解決済み】Eclipseで「公開型 <<classname>> は独自のファイルで定義する必要があります」エラー【重複あり

2022-01-26 13:12:30

質問

以下のようなコードを書きました。

package staticshow;


public class StaticDemo {
  static int a = 3;
  static int b = 4;

  static {
    System.out.println("Voila! Static block put into action");
  }

  static void show() {
    System.out.println("a= " + a);
    System.out.println("b= " + b);
  }
}

public class StaticDemoShow {
  public static void main() {
    StaticDemo.show(); 
  }
}

エラーメッセージが表示されるのですが。

The public type StaticDemo must be defined in its own file

最初の行のエラー public class StaticDemo {. なぜこのようなことが起こるのでしょうか、またどのように解決すればよいのでしょうか。なお、私のプロジェクト名は StaticDemoShow で、クラス名はこのコードにある通りです。

EDIT - 片方のクラスだけpublicにしたり、両方のクラスをdefaultにしたりすると、「Selectionにはメインタイプが含まれていません」というエラーが出ます。どうすればいいのでしょうか?

解決方法は?

もし {コード {コード ファイルにはトップレベル (ネストされていない) の staticshow の場合、そのパブリッククラスと同じ名前でなければなりません。つまり、次のようなクラスがあるとします。 .java に配置する必要があります。 public ファイルを作成します。そのため 2つのパブリッククラスを1つの public class A{...} ファイル .

もし、2つのパブリッククラスを持つことが許されるのであれば、パブリックは別として A.java クラスファイルには {コード を必要とします。 .java

A

  1. public class B{}

    A.java
  2. B.java

    • StaticDemoShow.java

       class StaticDemo { // It can no longer public
      
           static int a = 3;
           static int b = 4;
      
           static {
               System.out.println("Voila! Static block put into action");
           }
      
           static void show() {
               System.out.println("a= " + a);
               System.out.println("b= " + b);
           }
      
       }
      
       public class StaticDemoShow { // Only one top level public class in same .java file
           public static void main() {
               StaticDemo.show();
           }
       }
      
    • .java

        public class StaticDemo { // Note: same name as name of file
      
            static int a = 3;
            static int b = 4;
      
            static {
                System.out.println("Voila! Static block put into action");
            }
      
            static void show() {
                System.out.println("a= " + a);
                System.out.println("b= " + b);
            }
      
        }