公共类型&lt; <classname>&gt;必须在自己的文件中定义:错误的样式或不错的功能

时间:2015-08-14 14:31:23

标签: java

(因为我在一个特殊的情况下得到了这个错误,这对我来说真的很有意义。 我想分享一些其他地方未提及的类似问题的见解和解决方法......)

/* e.g. located in a src/main/java/mypkg/MyKeys.java file */
package mypkg;

public enum EditStatus { ... }
public enum CustomerTypeKey { ... }  // the suggestion of an IDE could be
                                     // to move this one to its own file
// ...

现在我希望将这些类型打包在一个文件中,如下面的答案中所述......

2 个答案:

答案 0 :(得分:0)

  1. 简单回答如果将这些类型移动到每个单独的文件并不是一件大事,那么就应该这样做!
  2. 虽然 一般不好的做法!(如图所示here)将多种类型放入一个&#34; java容器&#34;文件(你可以通过谷歌像我一样到达那里:-)),有(罕见的)情况这是有道理的,例如。

    1. 正确包含在 package-info.java (如注释类型等)或

    2. 中的内容
    3. 如果你是重新生成许多(可能类似的性质)类型,并且为了简单起见,希望将其保存在一个文件中,例如如果你从数据库创建/保持同步枚举&#34;键&#34; (就像我必须)。

      • 然后你可以包装某些&#34;父类&#34; ,例如

            /** do not edit! auto-generated if DB schema changes */
            class MyKeys { 
              public enum EditStatusKey { ... }
              public enum CustomerTypeKey { ... } 
              ... // maybe many(!) other types following
            }
        

        并通过MyKeys.EditStatusKey...

        访问它们
        • 请注意,如果您不使用枚举(例如我的情况),可能会使用static内部类(例如public static class EditStatusKeys { ... }
    4. (以防你怀疑我的例子:围绕我的db-java-code同步逻辑的自动化对于处理多个文件是不必要的(从单个表中自动生成超过30种类型)并且Java环境中的好处不存在,使用它可能更糟糕)

答案 1 :(得分:0)

确保并检查类名是否与.java文件名相同,这就是我收到上述错误的原因。