函数中的泛型类参数

时间:2013-10-27 16:39:23

标签: java generics dao

我做了这样的课程

public class Item<IdType> {
    public IdType id;
    public String name;
}

public class Dealer<IdType> {
    public IdType id;
    public String name;
}

和其他类中的函数如下:

  public <T> boolean deleteById(Class<Class<T>> modelClass, T id) {
           daooperation();
           return true;
    }

我想要做的是当我调用函数deleteById并且参数1为Item<Long>时,参数2(id)也应该使用Long数据类型 其他示例是deleteById,参数1是Dealer<String>,那么参数2(id)也应该使用String数据类型。如何解析参数1(modelClass)到函数deleteById或shoud我在deleteById中更改参数1(modelClass)? 请有人帮助我,告诉我该怎么做。

3 个答案:

答案 0 :(得分:1)

我认为你的方法应该更像这样。

public static <I extends Item<T>, T> boolean deleteById(I item, T id) {
    doSomething();
    return true;
}

public static <D extends Dealer<T>, T> boolean deleteById(D dealer, T id) {
    doSomething();
    return true;
}

答案 1 :(得分:0)

Object.Class方法是我的解决方案

答案 2 :(得分:0)

由于类型擦除和Java泛型的工作方式,您可以做的最好的是:

public class Test {

    public static <T extends WithId<B>, B> boolean foo(T obj, B id) {
        obj.id = id;
        return true;
    }

    public static void main(String[] args) {
        Bla<String> bar = new Bla<String>();
        foo(bar, "123"); // Works
        foo(bar,  123 ); // Fails
    }

}

abstract class WithId<T> {
    T id;
}

class Bla<T> extends WithId<T> {
    // ...
}