Java泛型类内部如何根据泛型新建实例

      如题, 若想实现这种功能是不行的, java的泛型不能二次传递, 所以不能如new T()的行不通. 但可以通过模板方式实现:

这个是泛型抽象基类,里面的newInstance是abstract的


/**
 * ModBus访问组件提供
 * Created by rocklee on 2019/11/5 15:12
 */
public abstract  class ModBusProvider {
  protected Map mModBusList= Collections.synchronizedMap(new HashMap<>());

  abstract T newInstance(String host,int port);
  public T get(String host){
    T lvInstance =null;
    synchronized (this) {
      lvInstance = mModBusList.get(host);
      if (lvInstance == null) {
         String lvsHost=host;
         int lvnPort=502;
         if (host.contains(":")){
            lvsHost=host.split(":")[0];
            lvnPort=Integer.parseInt(host.split(":")[1]);
         }
         lvInstance=newInstance(lvsHost,lvnPort);//new ModBusFxMaster(lvsHost,lvnPort);
         lvInstance.connect();
         mModBusList.put(host,lvInstance);
      }
    }
    return lvInstance;
  }
}

 

  建一个指定了泛型的实现类, 然后重写newInstance,在里面返回新实例.

/**
 * 三菱PLC 访问组件提供
 * Created by rocklee on 2019/11/5 15:56
 */
public class FxModBusProvider extends ModBusProvider {
  @Override
  ModBusFxMaster newInstance(String host, int port) {
    return new ModBusFxMaster(host,port);
  }
}

 

你可能感兴趣的:(java)