2012-07-20 66 views
0

我正在研究一个将被许多不同类型分类的类。有几个静态方法需要知道调用源自的子类的名称。现在我知道我可以做这样的事情在静态方法JPA如何确定哪个类正在调用方法?

foo(Class clazz, String things, String... stuff){} 

,但我更愿意让用户更容易,不必拨打电话如

Pass.retract(Pass.class, xxxx, yyyy); 

,而不是我D喜欢它看起来像

Pass.retract(xxxx, yyyy); 

现在,我知道JPA与它的find()函数做到这一点。我已经多次遍历搜索函数,但似乎实体变量神奇地填充了。它是如何做到的?如果有任何专家有想法,我会非常感激。

+1

为什么不将“方便”的util方法添加到子类中? – jtahlborn 2012-07-20 16:24:33

+0

如果你有一个特定于它的调用者的逻辑的方法,这意味着调用者的一些逻辑是在这个方法中。将一个类的逻辑放在另一个类的方法中实际上从来都不是一个好主意 - 还有其他方法可以共享代码。我建议你备份并考虑为什么你的设计需要这个构造,并确定如何摆脱它。 JPA正在为完全不同的目的而做这件事,这些程序逻辑的基本规则不适用。 – arcy 2012-07-20 17:20:01

+0

逻辑没有什么不同。简单地说,设置的字符串就会改变。本质上是做JPA做的,但是对于各种文件结构。每个子类都有自己的许多东西,但是除了类名外,还有少量的共享功能会逐字重复。我试图这样做是为了向其他程序员实施的礼貌。 – CGuess 2012-07-20 17:44:35

回答

2

Play 1.x做了很多魔术,包括使用Javassist的查找方法。它是一种运行时字节代码增强器,可以通过做一些“魔术”来隐藏用户API的复杂性。这就是说,Play2选择摆脱这种方式,因为核心开发人员认为,当人们试图维护核心代码库时,魔法太难理解了。

+0

我仍在使用Play 1.2.x,所以我不完全知道2.x是如何工作的。你能详细说明一下吗? – CGuess 2012-07-20 17:45:30

+0

玩2没有任何魔法。它使用特定的设计模式。 – Codemwnci 2012-07-20 19:59:39