Java 新的泛型对象问题

Java 新的泛型对象问题,java,generics,Java,Generics,可能重复: 公共类MyCache{ 私有映射映射=新的HashMap(); 公共空隙putToMap(长钳口,T){ map.put(nip,t); } 公共T getFromMap(长nip){ 返回地图。获取(nip); } } 公营可征税工厂{ 私有MyCache; 公共void setCache(MyCache){ this.cache=cache; } 公共可征税工厂(){ } 公共空心推杆(T){ putToMap(t.getNip(),t); } public T get(lon

可能重复:

公共类MyCache{
私有映射映射=新的HashMap();
公共空隙putToMap(长钳口,T){
map.put(nip,t);
}
公共T getFromMap(长nip){
返回地图。获取(nip);
}
}
公营可征税工厂{
私有MyCache;
公共void setCache(MyCache){
this.cache=cache;
}
公共可征税工厂(){
}
公共空心推杆(T){
putToMap(t.getNip(),t);
}
public T get(long nip)抛出实例化异常,IllegalAccessException{
T myT=cache.getFromMap(nip);
如果(myT==null){
T蝾螈;
推杆(牛顿);
返回null;
}否则
返回myT;
}

我在我的
get
方法中尝试了许多方法来创建新的T。似乎我不需要什么帮助:)如何使它工作?

即使您使用泛型,如果您想要获得T的新实例,仍然需要将类作为参数传递

public  T get(Class<T> clazz, long nip) throws InstantiationException, IllegalAccessException {

    T myT = cache.getFromMap(nip);
    if (myT == null) {

        T newT = clazz.newInstance();
        putT(newT);

        return newT;

    } else
        return myT;

}

事实上,它看起来像是一个复制品,而Lukas Link给出了一个解决方案。一个为什么不可能的提示:考虑一个扩展税的抽象类,在它上会有新的预成型件?注意使用反射会导致显著的性能损失。工厂模式(如@ Lukas Link所建议的)是一个更加优雅和高效的解决方案。@amit:它现在不像以前那么重要了…@Lukas:好吧,有一段时间没有对它进行基准测试了,所以我想我不会对此争论。但是,在我看来,工厂模式仍然更加优雅和可读。@Lukas:不过它不安全。不能保证有一个无参数构造函数。@伙计们:你呢要么知道你的设计,要么不知道。
public  T get(Class<T> clazz, long nip) throws InstantiationException, IllegalAccessException {

    T myT = cache.getFromMap(nip);
    if (myT == null) {

        T newT = clazz.newInstance();
        putT(newT);

        return newT;

    } else
        return myT;

}
.get(SomeTaxable.class, someNip)