Java 类型安全性:类型列表的表达式需要未经检查的转换才能符合列表<;对象[]>;

Java 类型安全性:类型列表的表达式需要未经检查的转换才能符合列表<;对象[]>;,java,types,Java,Types,当我想启动Hibernate应用程序时,我总是收到类型安全警告。有没有一种方法可以在不使用@SuppressWarnings(“unchecked”)的情况下消除此问题 这是我的密码: Configuration config = new Configuration(); config.addAnnotatedClass(Employee.class); config.configure("hibernate.cfg.xml"); new Sch

当我想启动Hibernate应用程序时,我总是收到类型安全警告。有没有一种方法可以在不使用
@SuppressWarnings(“unchecked”)
的情况下消除此问题

这是我的密码:

Configuration config = new Configuration();
        config.addAnnotatedClass(Employee.class);
        config.configure("hibernate.cfg.xml");

        new SchemaExport(config).create(false, false);

        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder()
                .applySettings(config.getProperties()).build();
        SessionFactory factory = config.buildSessionFactory(serviceRegistry);

        Session session = factory.getCurrentSession();

        session.beginTransaction();

        Query q = session
                .createQuery("SELECT e.empId,e.empName FROM Employee e");

        @SuppressWarnings("unchecked")
        List<Object[]> list = q.list(); <-- here is the problem!
Configuration config=new Configuration();
config.addAnnotatedClass(Employee.class);
configure(“hibernate.cfg.xml”);
新建SchemaExport(config).create(false,false);
ServiceRegistry ServiceRegistry=新标准ServiceRegistryBuilder()
.applySettings(config.getProperties()).build();
SessionFactory factory=config.buildSessionFactory(serviceRegistry);
Session Session=factory.getCurrentSession();
session.beginTransaction();
查询q=会话
.createQuery(“从员工e中选择e.empId、e.empName”);
@抑制警告(“未选中”)

List=q.List() 不,除非将q.list()完全设置为
列表,否则无法删除它。您可以强制强制强制强制转换使警告消失,但与抑制警告一样,它隐藏了一个潜在问题,因为q.list()不能保证返回该确切类型

List<Object[]> list = (List<Object[]>)q.list();
List List=(List)q.List();

Hibernate的
会话.list()
返回一个简单的原始
列表

将其强制转换为参数化集合(
List
此处)是完全合法的Java语法。但由于泛型类型信息在运行时被清除,编译器将发出警告,告诉您它不能保证此强制转换实际上是有效的。 所以这只是他告诉你“嘿,你在玩火,我希望你知道你在做什么,因为我不知道”


在这种特殊情况下,您无法消除此警告,但您可以通过使用
@SuppressWarnings
注释来明确忽略它。

另一个重载的
createQuery()
方法的接受结果类型

createQuery(String queryString, Class<T> resultType)

顺便说一句,Hibernate 5.2中的list()已被弃用。

我尝试了这个方法,但演员阵容没有删除警告。它只是将警告更改为Unchecked cast。
List<Employee> emp = session.createQuery("from Employee", Employee.class).getResultList();