如何在Java中传递Class作为参数并返回通用集合?
我正在为我的Java应用程序设计一个简单的数据访问对象。我有一些类(记录),它们代表像User
和中的表格中的一行Fruit
。
我想有一种方法来获取特定类型的所有记录。
就目前而言,我是这样的:
public List<User> getAllUsers() { ...
}
public List<Fruit> getAllFruits() {
...
}
....
但是我想有一个像这样的多态方法(错误):
public List<T> getAllRecords(Class<T> type) { if(type instanceof User) {
// Use JDBC and SQL SELECT * FROM user
} else if(type instanceof Fruit) {
// Use JDBC and SQL SELECT * FROM fruit
}
return collection;
}
使用示例:
List<Fruit> fruits = myDataAccessObject.getAllRecrods(Fruit.class);List<User> users = myDataAccessObject.getAllRecords(User.class);
如何用Java做到这一点?
回答:
既然您说不想在不同的类中使用数据访问方法(在Anish的回答中),所以我想为什么不尝试这样的方法。
public class Records { public interface RecordFetcher<T>{
public List<T> getRecords();
}
static RecordFetcher<Fruit> Fruit=new RecordFetcher<Fruit>(){
public List<Fruit> getRecords() {
...
}
};
static RecordFetcher<User> User=new RecordFetcher<User>(){
public List<User> getRecords() {
...
}
};
public static void main(String[] args) {
List<Fruit> fruitRecords=Records.Fruit.getRecords();
List<User> userRecords=Records.User.getRecords();
}
}
我想再添加一个实现。
public class Test {
public static void main(String[] args)
{
Test dataAccess=new Test();
List<Fruit> FruitList=dataAccess.getAllRecords(Fruit.myType);
List<User> UserList=dataAccess.getAllRecords(User.myType);
}
<T> List<T> getAllRecords(T cl)
{
List<T> list=new ArrayList<T>();
if(cl instanceof Fruit)
{
// Use JDBC and SQL SELECT * FROM fruit
}
else if(cl instanceof User)
{
// Use JDBC and SQL SELECT * FROM user
}
return list;
}
}
class Fruit
{
static final Fruit myType;
static {myType=new Fruit();}
}
class User
{
static final User myType;
static {myType=new User();}
}
:
我认为这种实现方式就是您所要求的
public class Test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException
{
Test dataAccess=new Test();
List<Fruit> FruitList=dataAccess.getAllRecords(Fruit.class);
List<User> UserList=dataAccess.getAllRecords(User.class);
}
<T> List<T> getAllRecords(Class<T> cl) throws InstantiationException, IllegalAccessException
{
T inst=cl.newInstance();
List<T> list=new ArrayList<T>();
if(inst instanceof Fruit)
{
// Use JDBC and SQL SELECT * FROM user
}
else if(inst instanceof User)
{
// Use JDBC and SQL SELECT * FROM fruit
}
return list;
}
}
以上是 如何在Java中传递Class作为参数并返回通用集合? 的全部内容, 来源链接: utcz.com/qa/432882.html