可以处理子类类型的超类中的泛型



我正在尝试将重复的代码移动到父类中,但此类代码使用特定类中的"详细信息"。

重复的代码检查

客户端.java

class Client extends SugarRecord {
private String uuid; // name, etc
public static Client findByUuid(String uuid){ // null check
List<Client> clients = find(Client.class, "uuid = ?", uuid);
return clients.get(0); // simplified, but checks for empty list and ret. null
}
}

福.java

class Foo extends SugarRecord {
private String uuid; // bar, etc
public static Foo findByUuid(String uuid){ // null check
List<Foo> foos = find(Foo.class, "uuid = ?", uuid);
return foos.get(0); // simplified, but checks for empty list and ret. null
}
}

注意:SugarRecord来自SugarORM。

如您所见,这是重复的,只会更改Something.class。这也可以用于其他事情,例如findAll().

预期方式

我的目的是这样使用它:

Client client = Client.findByUuid("abc");

问题

当我尝试将代码移动到父类中时,我不知道如何解析泛型类型并使其以所需的方式可调用。例如,我可以在父类中声明一个方法:

公共类 MyBaseClass 扩展了 SugarRecord{ public static T findByUuid(Class c, String uuid({ 列表结果 = find(c, "uuid = ?", uuid(; 返回结果.get(0(; } }

这样称呼它:

Client cli = Client.findByUuid(Client.class, "something");

但我想省略一些东西.class。


有没有办法做到这一点?

在基类中实现findByUuid(Class<T> c, String uuid)

class SugarRecord {
protected static <T> T findByUuid(Class<T> c, String uuid) {
List<T> result = find(c, "uuid = ?", uuid);
return result.get(0);
}
}

从子类方法调用它:

class Client extends SugarRecord {
public static Client findByUuid(String uuid) {
return findByUuid(Client.class, uuid);
}
}

随心所欲地使用它:

Client client = Client.findByUuid("abc");

最新更新