JavaからObjective-Cにコードを変換しようとしていますが、Java Genericの部分を変換するのが面倒です。たとえば、Javaのクラス宣言は、現在のクラスがComponentクラスのサブクラスである任意のクラスを拡張していると言っていますが、Objective-cではComponentクラスを拡張するだけですか?JavaをObjective-Cに変換する手助け
誰かが提供できる援助があれば幸いです。これで前進することで、同様のコードの他の部分を変換するのに役立ちます。おかげ
のJava:
public class ComponentMapper<T extends Component> {
private Class<T> classType;
public ComponentMapper(Class<T> type, World world) {
this.type = ComponentTypeManager.getTypeFor(type);
this.classType = type;
}
public T get(Entity e) {
return classType.cast(em.getComponent(e, type));
}
}
のObjective-C:例えば
@interface ComponentMapper : Component
{
ComponentType* componentType;
EntityManager* entityManager;
id classType;
}
- (id) init:(id) componentType World:(World*) world;
- (id) get:(Entity*) entity; // can this just return Entity instead
@end
@implementation ComponentMapper
- (ComponentMapper*) init:(id) type World:(World *) world {
if (self = [super init]) {
// should be a call to getEntityManager()
self->entityManager = [world entityManager];
self->componentType = [ComponentTypeManager getTypeFor:type];
self->classType = type;
}
return self;
}
- (id) get:(Entity*) entity
{
return [classType cast:[em getComponent:e param1:type]];
}
@end
'Class 'はJavaのイディオムで、Javaジェネリックのタイプ消去と戦うように設計されています。これは、イディオムを「言葉のように」翻訳することを避けることを本当に慎重にすべきときの1つです。なぜなら、ナンセンスで終わる機会は、これらの領域では本当に高いからです。最善のアプローチは、既存のデザインをテンプレートではなくインスピレーションとして新しいプロジェクトに使用することです。それはJavaをC#に翻訳していたときに私にとってはうまくいっていましたが、それははっきりとはっきりしていましたが、それでも主要なリファクタリングを正当化するのに十分です。 – dasblinkenlight