我有用于创建模型实例的工厂。工厂提供了这种方法:具有通用方法参数,返回类型和接口的工厂
public <Model> Model createFromJson(String json, final Class<Model> model) {
Model modelInstance = gson.fromJson(json, model);
((IModel)modelInstance).onCreateFromJson();
return modelInstance;
}
正如你可以看到我投的模式(如先前类方法参数给出)在接口的实例,这样我就可以调用特定的方法。 此外,泛型返回类型也很好,因为调用者不能转换任何对象。它只是足以叫:
MyModel myModel = ModelFactory.getInstance().createFromJson(json, MyModel.class);
但不幸的是,我可以调用工厂方法与任何类型的对象,如:
Integer myTest = ModelFactory.getInstance().createFromJson(json, Integer.class);
所以我想定义工厂方法的参数是类型的IModel。但我无法弄清楚,因为我通过了一个类,而不是Model(IModel)的一个实例。
所以,其实我正在寻找这样的事情:
public <Model<? extends IModel>> Model
createFromJson(String json, final Class<Model<? extends IModel>> model)
谁能给我建议?
是'Integer'在第二个电话,java.lang的。整数?如果是这样的话,那么你不能实现这一点,因为'Integer'和'Model'(我假设你已经实现了)之间唯一的公共超类/接口可以是'Object'并将对象转换为'IModel'是不可避免的,如果一个'Integer'值被传递,这又会失败。 – melihcelik
谢谢你们。解决方案比预期更简单。我会接受你所有的答案,但由于我只能接受一个答案,所以我选择了Veger的答案,因为这种类型只使用了一个字母。 –