我有两个互相交互的文件。我想定义一个枚举以使代码更具可读性,但如果我在文件1中定义它,则文件2抱怨不知道所述枚举。如果我在文件2中定义ii,则文件1也会这样做。我也将其定义为公开。
解决方案是在两个文件中定义枚举,但这对我来说似乎不对。它不仅是多余的,而且我担心它可能会引起一些冲突,即使这些类型具有相同的项目。
对此的判断是什么?我做错了什么或担心太多了?
修改
好吧,鉴于这里的评论,我找到了一个替代方案,似乎正在做我想要的,而不必创建一个新文件。我有:
档案1
class myClass1
{
public enum MyEnum
{
...
}
...
}
文件2
class myClass2
{
public enum MyEnum
{
...
}
....
}
现在,我有:
档案1
enum myEnum
{
...
}
...
class myClass1
{
...
}
文件2
class myClass2
{
...
}
我不想为枚举创建另一个文件,所以这对我有用。好吧,只要它没有任何问题,我认为没有。
答案 0 :(得分:12)
您绝对不应该在两个位置定义枚举。我建议使用公共可访问性在其自己的文件中定义枚举。然后每个人都应该没有问题访问它。但是,假设您要在两个类之一中定义枚举,我将继续......
您必须import
枚举或使用其完全限定名称。假设您在包com.stackoverflow
中,您的类应该在第一个文件中看起来像这样:
package com.stackoverflow;
public class A {
public enum MyEnum {
ONE,TWO,THREE;
}
...
}
并在另一个档案中:
package com.stackoverflow;
import com.stackoverflow.A.MyEnum;
public class B {
public void test(MyEnum mine) {
...
}
...
}
答案 1 :(得分:3)
不 - 这是错的。 enum
可以声明为静态内部类,并使用完全限定名称
public class MyClass {
public static enum MyEnum { BOOK, DVD }
public void myMethod() {
MyEnum e = MyEnum.DVD;
}
}
public class B {
public void someMethod() {
MyClass.MyEnum enumVal = MyClass.MyEnum.BOOK;
}
}
答案 2 :(得分:1)
还要记住,当你把enum放在另一个类的文件中时,你冒了风险 无法从另一个包访问枚举的问题 由于默认访问权限。 ......总是这样 明智地将枚举放在具有公共访问权限的单独文件中或作为 可以使用类访问的类的公共静态成员 名。
答案 3 :(得分:0)
您定义枚举的方式与定义类的方式相同 - 在自己的文件中,或者作为静态内部类(它们必须是静态的,不要绑定到它们的封闭类)。
在2个文件中定义你的枚举是坏的,因为它有点击败目的 - 你将有2个单独的枚举,虽然你想要在Enum.A上测试相等,你实际上会有Enum1.A! = Enum2.A。很混乱。
对他们来说,这并不是一个真正的谜,它只是一种定义常数的方法,比公共静态决赛更安全,更有能力。