2009-02-25 16 views
3

私はお互いに相互作用している2つのファイルを持っています。コードを読みやすくするために列挙型を定義したかったのですが、ファイル1で定義した場合、ファイル2は列挙型の知識がないという不満があります。私がファイル2にiiを定義すると、ファイル1は同じことをします。私はそれを公共としても定義しています。Java enumについての質問

解決策は、両方のファイルで列挙型を定義することでしたが、これは私にとっては当てはまりません。それは重複しているだけでなく、タイプが同じアイテムを持っていても矛盾が生じる恐れがあります。

これにどのようなことがありますか?間違っていることや心配しすぎていますか?

EDIT

まあ、私は新しいファイルを作成することなく、私が欲しいものをやっているように見えるの代替を見つけ、ここでコメント与えられました。私が持っていた:

ファイル1

class myClass1 
{ 
    public enum MyEnum 
    { 
     ... 
    } 
    ... 
} 

ファイル今2

class myClass2 
{ 
    public enum MyEnum 
    { 
     ... 
    } 
    .... 
} 

、私が持っている:

ファイルを1

enum myEnum 
{ 
    ... 
} 

... 

class myClass1 
{ 
    ... 
} 

ファイル2

class myClass2 
{ 
    ... 
} 

私は列挙型のためだけに別のファイルを作成したくないので、これは私のために働きます。まあ、間違いがない限り、私はそこにないと思います。

+0

コードサンプルはどうぞ。 –

+0

このコードは、enumを公開する必要がない限り有効です。 –

+0

それは両方のクラスの間でのみ共有されているので、そうである必要はありません。 –

答えて

11

間違いなく、両方の場所で列挙型を定義しないでください。 enumをパブリックアクセシビリティで独自のファイルに定義することをお勧めします。それで誰もそれにアクセスするのに問題はないはずです。ただし、2つのクラスのいずれかで列挙型を定義すると仮定すると、私は続行します...

列挙型はimportであるか、その完全修飾名を使用する必要があります。それは間違っている -

package com.stackoverflow; 

import com.stackoverflow.A.MyEnum; 

public class B { 

    public void test(MyEnum mine) { 
    ... 
    } 

    ... 
} 
+0

また、 "import com.stackoverflow.A;"と書くこともできます –

+0

この例では、AとBは同じパッケージに入っていますが、インポートは必要ありません。単に "A.MyEnum"と書いてください。 –

+0

MyEnumを静的宣言してはいけませんか? –

3

番号:

package com.stackoverflow; 

public class A { 
    public enum MyEnum { 
     ONE,TWO,THREE; 
    } 

    ... 
} 

、別のファイルに:あなたはパッケージcom.stackoverflowであると仮定すると、あなたのクラスは、最初のファイルには、次のようになります。 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; 
    } 
} 
+0

列挙型は、メンバークラスとして宣言されている場合は暗黙的に静的です。インターフェイスは暗黙的に静的であるのと同じように、 'static'キーワードを使用する必要はありません。ただそれを公開してください。 –

+0

はい - 自分の編集内容の1つに静的キーワードを追加しました。明示的にするのが少しはっきりしているかもしれないと思った –

0

完全修飾名を使用して、静的な内部クラスとして宣言して参照することができます - 自分のファイルのいずれかで、または静的な内部クラスを(彼らは」 dはその囲むクラスに束縛されないように静的でなければならない)。

2つのファイルにあなたのenumを定義するのは、その目的を破るものであるため、壊れています.2つの別々の列挙型を持ちますが、Enum.Aでは等価性をテストしたいと思うでしょう。Enum1.A != Enum2.A。とても混乱するような。

これは本当の謎ではありませんが、公的な静的な最終よりも安全で能力の高い定数を定義する方法はちょっと面倒です。

1

他のクラスのファイルにenumを入れたときに、 デフォルトのアクセス権のために別のパッケージ から列挙型にアクセスできないという問題が発生することもあります。 ...だから、 という名前でアクセスできるクラスのパブリックstaticメンバをパブリックアクセスを持つ別のファイルに入れたり、 という名前の列挙型にすることは、常に です。