投放与功能参数化

我有一个带有泛型函数的类,我想将其重用于不同的Object类型,以避免冗余代码。

据我所知,在这种情况下有两种方法可以使用:

  1. 在通用函数中返回Object,每次使用时都会强制转换结果
  2. 参数化该函数并在我调用它时指定对象类型(这将触发未经检查的强制转换警告)。

因此,我的问题是:

  1. 选择任何一种策略时我需要考虑什么差异?
  2. 如果Java在运行时在每个点上具有的信息几乎相同,为什么我会通过参数化方法收到“未经检查的转换”警告?

铸造:

public class Car {
  public Car createNew(String symKey) {
    Svc svc = new Svc();
    Car car = (Car) svc.getBySymKey(symKey);
  }
}
public class Svc { 

  public Object getBySymKey(String symKey) {
    return DB.getBySymKey(symKey);
  }
}

参数化:

public interface ObjSvcIntf {
  <E> E getBySymKey(String symKey);
}   

public abstract class ObjSvcImpl implements ObjSvcIntf {

  public Class<?> servicedClass;

  // CONSTRUCTOR
  public ObjSvcImpl (Class<?> servicedClass) {
    this.servicedClass = servicedClass;
  }

  public <E> E getBySymKey(String symKey){
    return (E) DB.getBySymKey(this.servicedClass,symKey);
  }

}

public class DriverSvc { 

  public Class<?> servicedClass;

  public DriverSvc () {
    this.servicedClass = Driver.class;
  }
}



public class CarSvc { 

  public Class<?> servicedClass;

  public CarSvc () {
    this.servicedClass = Car.class;
  }

  public Driver getDriver(String symKey) {
    return new DriverSvc().<Driver>getBySymKey(symKey);
  }

}

public class DB {
  public static <E> E getBySymKey (Class<?> entityClass,String symKey)
    Query query = DB.s.createQuery("from " + entityClass.getSimpleName() + " where     symKey = : symKey);
    query.setParameter("symKey",symKey);
    return (E) query.getResultList().get(0);
  }
}

编辑:

在第二种情况下,不可避免的是带有表达式targetType.cast(tmpObject)的新参数targetType吗?

zuo123456789roc 回答:投放与功能参数化

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3060126.html

大家都在问