動的コードを書きたいとしましょう:
ウォークラフト 3 トリガー システム:
Event: if a unit levels
Condition: if ( triggeringUnit is alive ) && ( triggeringUnit.name="something" )
ジャワ
for ( Unit triggeringUnit : leveledUnits )
{
condition1 = new IsAliveCondition(triggeringUnit);
condition2 = new HasNameCondition(triggeringUnit);
if ( new AndCondition( condition1 , condition2 ).isTrue() )
{
}
}
問題 : コードが静的に記述されている場合、このコードは実行されますが、動的に形成することはできません。条件 1,2 を作成するには、コンストラクターに「特定のユニット」が必要なため、メモリに格納することはできません (作成できないため)。この問題が存在する理由: 条件 1,2 は、それが「for ループ」内にあることを認識していません。また、そのスコープに変数「triggeringUnit」があることも知りません。
その問題を解決するには、スコープ内のすべての変数でハッシュマップを作成する必要がありますか?
Hashmap<String, Object> variables = ... ;
condition1 = new IsAliveCondition("triggeringUnit");
condition2 = new HasNameCondition("triggeringUnit");
condition = new AndCondition( condition1, condition2);
//At Runtime
for( Unit triggeringUnit : leveledUnits )
{
variables.put("triggeringUnit", triggeringUnit );
if ( condition.isTrue() )
{
}
}
これよりも優れたソリューション/設計パターンはありますか?