2017-05-19 14 views
1

最近質問がありましたhereソース変数があるリスナの実装方法異なる計画エンティティクラス異なるエンティティのソースを持つCustomVariableListener

@PlanningEntity 
class FirstPlanningEntityClass{ 

    @PlanningVariable 
    int a; 
} 

と私は私の影の計画変数を更新したい私の第三(影)計画エンティティで

@PlanningEntity 
class SecondPlanningEntityClass{ 

    @PlanningVariable 
    int b; 
} 

ときのいずれかaまたはb変化(すなわち、aやソースなどb)など、:

@PlanningEntity //shadow planning entity 
class ShadowEntityClass{ 
    @CustomShadowVariable(variableListenerClass = MyListener.class, 
     sources = {@CustomShadowVariable.Source(entityClass = FirstEntityClass.class, variableName = "a"), 
       @CustomShadowVariable.Source(entityClass = SecondEntityClass.class, variableName = "b")}) 
    public local int getMyShadowVariable(){...} 

しかし、MyListenerClassはパラメータVariableListenerワットを実装する必要があります。 i番目の型パラメータがソース変数が上にあるエンティティクラスに対応して1つだけの型パラメータ、:

public class MyListenerClass implements VariableListener<Entity_>{...} 

しかし、ソース変数は計画エンティティクラスです。この問題を解決するために

、私はいくつかのことを試してみました:

  • 私は、例えばとFirstPlanningEntityClassFirstPlanningEntityClassをインターフェースすることはできません2つのエンティティクラスとして共通のCommonPlanningEntityInferfaceは大きく異なります。この共通インタフェースは、VariableListenerの型パラメータとして使用されている可能性があります。
  • Iはまた、例えば、互いの上にこのような

    @CustomShadowVariable(variableListenerClass = MyFirstListener.class, 
    sources = {@CustomShadowVariable.Source(entityClass = FirstPlanningEntity.class, variableName = "a")}, 
    variableListenerClass = MySecondListener.class, 
    sources = {@CustomShadowVariable.Source(entityClass = SecondPlanningEntity.class, variableName = "b")}) 
    
  • 又は二注釈として@CustomShadowVariable引数リスト内の2つの異なるリスナクラスを指定することはできません

    @CustomShadowVariable(variableListenerClass = MyFirstListener.class, 
    sources = {@CustomShadowVariable.Source(entityClass = FirstPlanningEntity.class, variableName = "a")}) 
    @CustomShadowVariable(variableListenerClass = MySecondListener.class, 
    sources = {@CustomShadowVariable.Source(entityClass = SEcondPlanningEntity.class, variableName = "b")}) 
    

マニュアルだけ同じクラスの多くの計画変数または別のクラスの1つの計画変数(セクション4.3.6.4。、6.5.0)を指します。

ソースとして2つの計画変数を持つシャドウ変数を実装するにはどうすればいいですか異なる計画エンティティクラスですか? hereの答えは、計画エンティティクラスの2つのシャドウ変数の変更を主にカバーしていました。

+0

設計上、シャドウ変数ごとに1つの変数リスナの実装しかできないため、互いに矛盾することはありません。 –

答えて

0

はジェネリックパラメータの型と共通のインターフェースあるいは単なる古いjava.lang.Objectを使用します。

public class MyListenerClass implements VariableListener<Object>{...} 

あなたの実装では、おそらくそれに応じて第一又は第二のクラスにソース・インスタンスとキャストのinstanceofチェックが必要になります。

0

皆を気にして申し訳ありません - どのようなばかげた質問です。

私がやらなければならないことは、それぞれ、abShadowEntityClassリスニング上の2つの暫定シャドウ変数を作成することです。次に、これらの暫定シャドー変数を持つリスナーをgetMyShadowVariableに作成します。この暫定シャドー変数は、ソースと同じ計画エンティティクラスにあります。

(ただし、私はまだ注釈署名が複数の計画エンティティクラスのシャドー変数を許可すべきではないと考えています)。

+0

これは冗長で潜在的に遅いです。試してみてください。代わりに 'VariableListener 'を実装してください:) –