2016-05-11 11 views
1

Javaのコードで何が起こっているのかを理解しようとしていますが、これまで管理していませんでした。これはこのlibraryの一部です。Java - enumとコンストラクタ内の関数/ varablesの問題

私の不思議は

CURRENT_SIM_TIME(Constants.VAR_TIME_STEP), NET_BOUNDARIES(Constants.VAR_NET_BOUNDING_BOX) 

に彼らは、コード内で以前に表示されていないと、後に、任意の括弧()なしCURRENT_SIM_TIMEを使用して1つのコンストラクタがあります。

enum Variable { 
     CURRENT_SIM_TIME(Constants.VAR_TIME_STEP), NET_BOUNDARIES(
       Constants.VAR_NET_BOUNDING_BOX), ; 
     public final int id; 
     private Variable(int id) { 
      this.id = id; 
     } 
} 

これは私が話していたコンストラクタ:

SimulationData(DataInputStream dis, DataOutputStream dos) { 
     super("", Variable.class); 
     addReadQuery(Variable.CURRENT_SIM_TIME, 
       new ReadObjectVarQuery.IntegerQ(dis, dos, 
         Constants.CMD_GET_SIM_VARIABLE, "", 
         Variable.CURRENT_SIM_TIME.id) { 

       }); 

     addReadQuery(Variable.NET_BOUNDARIES, 
       new ReadObjectVarQuery.BoundingBoxQ(dis, dos, 
         Constants.CMD_GET_SIM_VARIABLE, "", 
         Variable.NET_BOUNDARIES.id)); 

     this.dis = dis; 
     this.dos = dos; 

    } 

だから、どのようにこれは可能ですか?列挙型変数内

我々は括弧内の引数でCURRENT_SIM_TIMENET_BOUNDARIESを持って、その後、コンストラクタで、私たちは、引数として括弧なしで、Variable.CURRENT_SIM_TIMEなどVariable.NET_BOUNDARIESaddReadQueryを作成します。

これらの機能はありますか?静的変数?それらはコードの他の部分で定義されていて、それらを見つけることができませんか?列挙型の宣言私は本当に今失われています

...

+1

Javaの列挙型では、このような構成が可能です。基本的にはクラスです。https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html – CoolBots

答えて

2

enum Variable { 
     CURRENT_SIM_TIME(Constants.VAR_TIME_STEP), NET_BOUNDARIES(
       Constants.VAR_NET_BOUNDING_BOX), ; 
     public final int id; 
     private Variable(int id) { 
      this.id = id; 
     } 
} 

だから、あなたの列挙型の宣言内部CURRENT_SIM_TIME(Constants.VAR_TIME_STEP)を言って、あなたは、コンストラクタを呼び出しているVariable(int id)ように列挙CURRENT_SIM_TIMEについてid変数の値は、その列挙型自体に対してConstants.VAR_TIME_STEPに設定されます。同様の

だからあなたがCURRENT_SIM_TIMEためidの値を取得したい場合NET_BOUNDARIES

の場合と、あなたはそれが好きだろう:

列挙を使用して

Variable.NET_BOUNDARIES.id

また、enumを使用すると、コンストラクタで呼び出す必要はありません。これは、宣言した時点で既に行われているためですeあなたのenum。だからあなたはenumを使うだけです。

+0

今私はそれをundestand!ただ1つのコメント。私はこれに相当するC#を作成しようとしていますので、このスレッドのように変換を行うことをお勧めしますか? http://stackoverflow.com/questions/469287/c-sharp-vs-java-enum-for-those-new-to-c – Biurrun

+1

あなたの要件に応じてそれを行うことはできますが、それはenumのための唯一の方法になりますあなたが 'Variable.NET_BOUNDARIES.someMethodDefinedInVariableEnum()'のように呼び出すことのできるクラスのようなものです。 – Abubakkar

関連する問題