0

我做了这样的课

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;
    }

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

4

3 回答 3

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;
}
于 2013-10-27T16:44:00.877 回答
0

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

于 2013-10-27T16:41:59.687 回答
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> {
    // ...
}
于 2013-10-27T17:43:21.063 回答