Java 函数中的泛型类参数

Java 函数中的泛型类参数,java,generics,dao,Java,Generics,Dao,我上过这样的课 public class Item<IdType> { public IdType id; public String name; } public class Dealer<IdType> { public IdType id; public String name; } 公共类项目{ 公共id类型id; 公共字符串名称; } 公共类交易商{ 公共id类型id; 公共字符串名称; } 和其他类中的一个函数,如下所示:

我上过这样的课

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

public class Dealer<IdType> {
    public IdType id;
    public String name;
}
公共类项目{
公共id类型id;
公共字符串名称;
}
公共类交易商{
公共id类型id;
公共字符串名称;
}
和其他类中的一个函数,如下所示:

  public <T> boolean deleteById(Class<Class<T>> modelClass, T id) {
           daooperation();
           return true;
    }
public boolean deleteById(类modelClass,T id){
dao操作();
返回true;
}
我想做的是,当我使用参数1调用函数deleteById时,参数1是
Item
,那么参数2(id)也应该使用
Long
数据类型 另一个例子是deleteById,参数1为
Dealer
,那么参数2(id)也应该使用
String
数据类型。如何将参数1(modelClass)解析为函数deleteById,还是应该更改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;
}
public静态布尔deleteById(I项,T id){
doSomething();
返回true;
}
公共静态布尔deleteById(D经销商,T id){
doSomething();
返回true;
}

由于类型擦除和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> {
    // ...
}
公共类测试{
公共静态布尔foo(T obj,B id){
obj.id=id;
返回true;
}
公共静态void main(字符串[]args){
Bla bar=新Bla();
foo(bar,“123”);//作品
foo(bar,123);//失败
}
}
ID为的抽象类{
T-id;
}
类Bla扩展为id{
// ...
}

您可能需要查找类型参数的约束。对不起,您能解释一下DAO是否真的需要类吗?您的代码中没有使用
modelClass
id
,因此它们一开始似乎不必要。你能想出一个需要这样一个约束的情况吗?很抱歉,我不希望“I”被绑定到函数中。我更新了代码部分以给出一个示例。通用的“扩展”不支持“或”。您好,谢谢您的回复。我正在尝试在android中制作DAO的API。所以我不想做一个函数来删除一种模型。我的计划是使用reflection生成按id删除的查询。为什么不只使用
public static boolean deleteById(Item Item,T id)
public static boolean deleteById(Dealer-Dealer,T id)
部分的术语又是什么?我可以避免创建新对象来传递给foo吗?问题是,从type
with id
获取type
T
的唯一方法是提供具有该类型的对象或显式传递泛型类型。不,您不能有
。悲哀但真实。
公共静态布尔foo(带id obj,B id)
会更简单