我是不是需要在自己的文件中将枚举定义为“公共”,以便可以在自己的包之外识别它?
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】:通过不使用public
、protected
或private
,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
在 Amazon S3 中将在 aws3 存储桶中创建的文件夹设为公共或私有文件夹