当前位置: 首页 > 面试题库 >

Java类-如何将泛型对象传递给函数

弓晔
2023-03-14
问题内容

这是我的基本功能:

public static void main(String[] a) throws Exception {

    Session sessione = HibernateUtil.getSessionFactory().openSession();
    Query query = sessione.createSQLQuery("select * from User").addEntity(User.class);
    List<User> rows = query.list();
    Iterator it = rows.iterator();
    while (it.hasNext()) {
        User usr = (User) it.next();
        System.out.println(usr.getEmail());
        System.out.println(usr.getName());
        System.out.println(usr.getIdUser());
        System.out.println(usr.getUser());

    }

此功能能够连接并在我的数据库上执行查询…

我想创建相同的功能,但更通用。…前一个仅用于一个表(User),新表必须能够接受String查询的参数作为输入,以及将在其中执行查询的类类型。这将允许我仅使用一行来执行查询。

应该是这样的:

public static void queryResult(String query, <ClassOfTable>) {

    Session sessione = HibernateUtil.getSessionFactory().openSession();
    Query qy = sessione.createSQLQuery(query).addEntity(<ClassOfTable>.class);
    List<<ClassOfTable>> rows = qy.list();
    Iterator it = rows.iterator();
    while (it.hasNext()) {
        <ClassOfTable> obj = (<ClassOfTable>) it.next();
    }

}

您发现ClassOfTable我不知道如何“通用”代码

我希望已经清楚了…

PS ClassOfTable应该是DB(Hibernate)中表的类的代表。

谢谢。


问题答案:
public static <T> void queryResult(String query, Class<? extends T> clazz) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Query q = session.createSQLQuery(query).addEntity(clazz);
    List rows = q.list();
    Iterator it = rows.iterator();
    while (it.hasNext()) {
        T t = (T) it.next();
        // do your work on object t
    }
}

如果您打算返回结果集,请使用:

public static <T> List<T> queryResult(String query, Class<? extends T> clazz) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    Query q = session.createSQLQuery(query).addEntity(clazz);
    List<T> rows = (List<T>) q.list();
    return Collections.unmodifiableList(rows);
}

// now call generic method
List<User> users = queryResult("select * from User", User.class);
users.forEach(usr -> {
    System.out.println(usr.getEmail());
    System.out.println(usr.getName());
    System.out.println(usr.getIdUser());
    System.out.println(usr.getUser());
});


 类似资料:
  • 我试图使一个用户类和使用类来处理登录,但从某种原因我的用户类构造函数是读取我的mysqli对象作为一个字符串 这是我的密码 Class.php mysql.php checklogin.php 它给了我这个错误 可捕获的致命错误:在第13行的C:\wamp\www\class.php中,类mysqli的对象无法转换为字符串 我要把头发拔出来了,有什么想法吗?

  • 我有一个抽象基类,它有以下私有变量 我希望其他所有扩展基类的类都实现以下方法 我的问题是,除了Map之外,我不能为实现选择任何其他类型 如果我不能控制选项映射的类型,但我想让initOptions方法的实现类知道映射中的键是String类型,值可以是任何对象,那么处理这种情况的正确方法是什么。

  • 我正在尝试用Dapper和存储过程编写一些更通用的代码。我做了一些研究,但我被这部分卡住了… 我有一些类似实体的类,这些实体将被一些存储过程返回(那些过程不能被修改)。例如,我有两个类。 存储过程通常返回一些select子句,对于本例,它返回两个select子句,每个子句用于用户和角色的信息,因此我有以下类来存储这些子句。 在这个项目中,我们必须使用Dapper,所以我做了一个泛型函数,其中T是将

  • 我正在尝试按房间类别(手术室或技术室)返回过滤后的

  • 问题内容: 我正在尝试使用Luaj + Java构建控制器。我有以下java类 以及控制器的以下lua脚本: 理想情况下,我想定义一个控制器(用lua编写),在其中我将保留程序的所有逻辑,并且我希望将该控制器的API公开给我的Java代码。我正在尝试使用以下方法: 我无法将对象传递给LuaValue。如何将Java对象传递给lua脚本? PS:通常,在使用Java和嵌入式脚本时,人们会将功能捆绑在

  • 我在示例中看到如何将消息字符串传递给亚马逊 sns sdk 的发布方法。但是,是否有如何将自定义对象作为消息传递的示例?我尝试将“消息结构”设置为“json”,但随后我得到错误。我应该将对象值传递到参数中的哪个位置? 有什么例子吗?