我正在为我的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中,如何将一个函数作为另一个函数的参数传递? 问题答案: Java 8及以上 如果你的类或接口只有一个抽象方法(有时称为SAM type),则使用Java 8+ lambda表达式,例如: 然后可以在使用MyInterface的任何地方替换lambda表达式: 例如,你可以非常快速地创建一个新线程: 并使用方法引用语法使其更加清晰: 如果没有 lambda表达式,则最后两个示
我是阿帕奇·Flink的新手。我有一个flink scala项目,它使用来自kafka集群的数据,我需要将流结果作为参数传递,以使用返回此转换流的api。这是我的密码 有什么帮助吗?
我必须将一个协议作为参数传递给一个函数。协议是泛型的,具有关联的类型。我找不到一个好办法。 我想要实现的基本上是在JSON中存储一个键值对。所以我有一个通用的数据类型协议,它设置/获取值(根据数据类型设置和获取) 在另一个协议中,我希望将这个泛型数据类型协议作为函数参数传递。 在下面的代码中,我得到的协议“dataType”只能用作泛型约束,因为它有自身或关联的类型要求
问题内容: 码: 当我尝试: 我在Eclipse中收到错误。 但当: 一切都好。为什么会有这种差异?谢谢。 问题答案: 因为语法是特殊的语法糖,仅在初始化数组变量时才适用。这是因为任务本身缺少类型信息;但是在赋值的特殊情况下,类型是从变量中完全推断出来的。 在第一个示例中,编译器知道您要分配给它(是),因此允许使用此语法。在后者中,您无需初始化变量(并且由于Java类型推断的弱点,它甚至也无法完全
在Python中,我可以很容易地将函数作为参数传递,并在另一个函数内部执行。
问题内容: 有没有办法将可执行块作为参数传递给静态方法?有可能吗?例如我有这种方法 或类似的东西。实际上,这要复杂得多,我只是简化了这个问题。我试图重构项目,并创建了一个通用实用程序类,其中包含类使用的静态方法。 问题答案: 您可以使用对象: 然后,您可以使用以下命令调用它: 编辑(对不起,@ Bohemian):在Java 8中,可以使用lambdas简化调用代码: 您仍然会以相同的方式声明。l