我做了一个这样的类
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> {
// ...
}