我做了这样的课程
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)?
请有人帮助我,告诉我该怎么做。
答案 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> {
// ...
}