我是不是需要在自己的文件中将枚举定义为“公共”,以便可以在自己的包之外识别它?

Posted

技术标签:

【中文标题】我是不是需要在自己的文件中将枚举定义为“公共”,以便可以在自己的包之外识别它?【英文标题】:Do I need to define an enum as 'public' in its own file so it can be recognized outside its own package?我是否需要在自己的文件中将枚举定义为“公共”,以便可以在自己的包之外识别它? 【发布时间】:2011-04-17 10:00:37 【问题描述】:

我有两个包 - x 和 y。

x 包含Student 类和Grade 枚举。

y 包含Klass 类。

为什么在包 y 的 Klass 类中无法识别类型 Student.Grade.C

是否需要在自己的文件中定义并公开?

package x;

enum Grade  A, B, C, D, F, INCOMPLETE ;

public class Student 

// blah, blah, member variables, getters, setters, constructors    




package y;

public class Klass 

 // This enum type is not recognized in this package
 public static final MINIMUM_GRADE = Student.Grade.C; 


【问题讨论】:

【参考方案1】:

通过不使用publicprotectedprivate,Grade 枚举具有the default access level - 这意味着只有同一包中的其他类可以使用它。

【讨论】:

【参考方案2】:

是的,您必须将该枚举声明为公开。您不必将其放在自己的文件中。

您将像您的示例一样访问Student.Grade.C

您可以 import Student.Grade 并在您的代码中使用 C

【讨论】:

"Yes, you do have to declare that enum public. You shouldn't have to have it in its own file." -> 如果我做到了 public,我会得到错误:"The public type Grade must be defined in its own file". 您是否将枚举定义放在Grade 类中?如果你把它放在外面(比如你的例子),你需要一个单独的文件。如果你想要它在外面,也许你想要一个单独的文件......枚举是否与Grade紧密耦合(似乎是......)?

以上是关于我是不是需要在自己的文件中将枚举定义为“公共”,以便可以在自己的包之外识别它?的主要内容,如果未能解决你的问题,请参考以下文章

Swift/IOS/CoreData:如何在自动生成的 CoreData 类中将 var 定义为枚举类型?

check.cpp 文件无法识别在 check.h 文件中声明的枚举 TStatus

在 MongoDB 中将枚举存储为字符串

在 Amazon S3 中将在 aws3 存储桶中创建的文件夹设为公共或私有文件夹

在Angular 6模板语句中将字符串转换为Typescript枚举

是否可以在私有方法中定义公共变量?