【问题标题】:How to return the actual type rather than an Object type from a method that can work for multiple Class types?如何从可用于多种 Class 类型的方法返回实际类型而不是 Object 类型?
【发布时间】:2011-07-20 11:49:18
【问题描述】:

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

我希望能够只从 FooServiceBooService 调用 findModel 而无需转换为 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 扩展子服务:

public Foo getFoo(long id) {

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

}

BooService 扩展子服务:

public Boo getBoo(long id) {

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

}

【问题讨论】:

    标签: java oop inheritance casting jdo


    【解决方案1】:

    用泛型重新定义方法:

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

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

    【讨论】:

      【解决方案2】:

      将 findModel 中的对象转换为 SubService

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

      然后你可以在 fooService 中删除强制转换

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

      【讨论】:

        猜你喜欢
        • 2018-11-19
        • 2018-05-09
        • 1970-01-01
        • 2021-06-28
        • 2021-03-11
        • 2017-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多