关于java:新的通用对象问题

new generic object problem

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Create instance of generic type in Java?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class MyCache <T extends Taxable> {


    private Map<Long, T> map = new HashMap<Long, T>();

    public void putToMap(Long nip, T t){
        map.put(nip, t);
    }

    public T getFromMap(Long nip){
        return map.get(nip);
    }

}

public class TaxableFactory<T extends Taxable> {

    private MyCache<T> cache;

    public void setCache(MyCache<T> cache) {
        this.cache = cache;
    }

    public TaxableFactory() {

    }

    public void putT(T t) {
        cache.putToMap(t.getNip(), t);
    }

    public  T get(long nip) throws InstantiationException, IllegalAccessException {

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

            T newT ;
            putT(newT);

            return null;

        } else
            return myT;

    }

我用我的get方法尝试了很多方法来创建新的t。似乎我不需要什么帮助:)如何让它工作?


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;

}

你可以这样称呼它:

1
.get(SomeTaxable.class, someNip)