ジェネリックを使用してインスタンスを注入しようとしていますが、次のエラーが発生します。
HasOne<ModelClass> cannot be used as a key; It is not fully specified.
これを行う最も安全な方法は、インジェクターを使用してインスタンスを取得するときにジェネリックで使用されるクラスに明示的に名前を付けることであると他の場所で読みましたが、少しきれいにしたいと思います。Relationship
の間にオブジェクトを作成しようとしていますModels
。
ここに私の単純化されたModel
クラスがあります
public class Model {
@Inject
Injector injector;
public <ModelClass extends Model> HasOne<ModelClass> hasOne(Class<ModelClass> clazz) {
HasOne<ModelClass> hasOne = injector.getInstance(Key.get(new TypeLiteral<HasOne<ModelClass>>() {
}));
hasOne.init(clazz);
return hasOne;
}
}
私のHasOne
関係
public class HasOne<T extends Model> {
Class clazz;
public void init(Class<T> clazz){
this.clazz = clazz;
}
@Inject
Injector injector;
public T get(){
return (T) injector.getInstance(clazz);
}
}
テストModel
#1
public class TestModel extends Model {
public HasOne<ExampleModel> exampleModel(){
return hasOne(ExampleModel.class);
}
}
テストModel
#2
public class ExampleModel extends Model {
}
これを行うとエラーが発生します
TestModel testModel = RoboGuice.getInjector(context).getInstance(TestModel.class);
HasOne<ExampleModel> relationship = testModel.exampleModel();
Model
醜い人間関係の成り立ちを隠してクラスに留めようとしている