オブジェクトキャッシュを実装しています:
void cache(String request_type, String request_id, ProcessingStrategy request_strategy)
{
if (no_state(request_strategy) == true)
map.put(request_type, request_strategy);
else
map.put(request_id, request_strategy); //no chance of keyspace collision
}
ProcessingStrategy lookup(String request_type, String request_id)
{
ProcessingStrategy request_strategy = map.get(request_type);
if (request_strategy == null) return map.get(request_id)
else return request_strategy;
}
interface ProcessingStrategy
特定のタイプのすべての要求にわたって実装されるオブジェクトを共有するこのスキームは、具象クラスに格納されている状態がない場合にのみ機能します。
no_state
メソッドを作成するにはどうすればよいですか?
final
すべてのメンバーフィールドがReflectionを使用しているかどうかを確認するだけで十分だと思います。
for(Field f : request_strategy.getClass().getDeclaredFields())
if(!Modifier.isFinal(f.getModifiers()))
return false;
//even if all fields are final;
//how to check that they are not being initialized with differently in the ProcessingStrategy constructor?