函数中的泛型类参数



我做了一个这样的类

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 或 shoud 我在 deleteById 中更改参数 1(modelClass)?请有人帮助我,告诉我该怎么做。

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

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

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

由于类型擦除和 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> {
    // ...
}

最新更新