Java someMethod(SomeClass.class)的底层过程
在hibernate中创建我们使用的标准Java someMethod(SomeClass.class)的底层过程,java,reflection,Java,Reflection,在hibernate中创建我们使用的标准 Criteria criterea=session.createCritera(SomeClass.class) 它可能在其他一些示例中也可用,但我无法理解这些类型方法的结构 注意这是一个示例,我试图用它来理解SomeClass.classlike参数的用法 我的问题是SomeClass.class的目的是什么?我们为什么需要它,用它作为论据有什么好处 编辑它不是重复的,但有字符串连接到这是什么.class语法? 如果将.class附加到类名的末尾,则
Criteria criterea=session.createCritera(SomeClass.class)
它可能在其他一些示例中也可用,但我无法理解这些类型方法的结构
注意这是一个示例,我试图用它来理解SomeClass.class
like参数的用法
我的问题是SomeClass.class
的目的是什么?我们为什么需要它,用它作为论据有什么好处
编辑它不是重复的,但有字符串连接到这是什么.class
语法?
如果将.class
附加到类名的末尾,则会得到与该类对应的类
对象
示例:
返回String.class
class
返回Integer.class
class
在JSON序列化程序中,您需要给它一个class对象,因为它需要获取所有要序列化为JSON的字段。它使用反射来获取和设置这些字段的值,然后将它们转换为JSON。当它反序列化JSON时,它会找到需要用JSON中的名称设置的字段。这些操作需要一个
类
对象,因为没有它,Java怎么知道应该找到哪个类?另外,要创建具有反射的新对象,还需要一个类 Hibernate提供了许多方法来处理与RDBMS表相关的对象。
一种方法是会话接口提供createCriteria()方法,该方法可用于创建Criteria对象。
正如name所说的criteria,通过应用过滤规则和程序员希望的逻辑条件来执行查询是很有用的
例如:
Criteria obj=session.createCritera(Galaxy.class) // say SomeClass is Galaxy.class
List results = obj.list();
这里,criteria查询只是返回与Galaxy类对应的每个对象
我们甚至可以使用条件限制结果,例如,criteria对象的add()方法可以为criteria查询添加限制。
以下是返回星系级行星74亿人口记录的限制:
Criteria cr = session.createCriteria(Galaxy.class);
cr.add(Restrictions.eq(“planet”, 75000000000));
List results = cr.list();
虽然它询问了ClassName.class
参数的特定用例,但可能重复,关于这一点,我在回答中写了几句话:@Marco13谢谢他们的帮助:)短篇故事:你是想说我们在方法参数中使用SomeClass.class
只是为了创建它的实例,但由于反射是一个沉重的过程,那为什么不另找一个呢alternatives@HelloWorld因为像hibernate这样的库如果不使用类
,就不可能知道您创建的类的名称。这就是为什么它不能通过new SomeClass()
创建类实例的原因。我想我可能是在浪费你的时间,但我从你的答案中想的是传递SomeClass.class
作为参数将强制反射查找相关数据,例如类名,要操作的字段的名称,这可以通过编写长行代码来完成,现在我想问的是,采用这种方法是好的,还是长行是好的?@HelloWorld我不知道如何通过编写长行代码来获得未知类中字段的值。即使有办法,我认为你现在也应该坚持反思,因为过早的优化是万恶之源。如果您发现使用反射非常慢,请尝试使用较长的代码行,看看会发生什么。我得到了一行代码A。类只是从thread()编译成class.forName(“A”)
,这解释了我认为您误解问题的几乎很多原因