如何从可以适用于多个类类型的方法返回实际类型而不是Object类型?

时间:2011-07-20 11:49:18

标签: java oop inheritance casting jdo

有没有办法修改findModel 中的SubService方法以返回FooBoo 键入而不是Object类型

我希望能够从findModelFooService致电BooService而不转发给FooBoo模型对象

这可能吗?

子服务:

public Object findModel(long id, Class modelClass) {

    Object modelObject = null;
    javax.jdo.Query query = persistenceManager.newQuery(modelClass);
    query.setFilter("id == idParam");
    query.declareParameters("long idParam");
    List<Object> modelObjects = (List<Object>) query.execute(id);
    if(modelObjects.isEmpty()){
        modelObject = null;
    }
    else{
        modelObject = modelObjects.get(0);
    }
    return modelObject;

}

FooService扩展了SubService:

public Foo getFoo(long id) {

    Foo modelObject = (Foo)this.findModel(id, Foo.class);
    return modelObject;

}

BooService扩展了SubService:

public Boo getBoo(long id) {

    Boo modelObject = (Boo)this.findModel(id, Boo.class);
    return modelObject;

}

2 个答案:

答案 0 :(得分:4)

使用泛型重新定义方法:

public <T> T findModel(long id, Class<T> modelClass)

现在它将返回你需要的东西,你不需要施法。

答案 1 :(得分:0)

将findModel中的对象投射到SubService

public SubService findModel(long id, Class modelClass)  {
     return (SubService) modelObject;
}

然后你可以放弃fooService中的强制转换

Foo modelObject = this.findModel(id, Foo.class);