繁体   English   中英

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

[英]How to return the actual type rather than an Object type from a method that can work for multiple Class types?

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

我希望能够从FooServiceBooService调用findModel而无需转换为FooBoo model object。

那可能吗?

子服务:

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 扩展子服务:

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;

}

用 generics 重新定义方法:

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

现在它将返回您需要的内容,并且您不需要强制转换。

将 findModel 中的对象转换为SubService

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

然后你可以在 fooService 中删除铸件

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM