如何在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

回到顶部