2014-10-18 28 views
0

我想编写一个方法,将Lambdaj.on()调用的结果或字符串作为参数。有没有办法在运行时确定是否使用Lambdaj.on()方法创建了一个对象?

public static <T> void method(T arg) { 
} 

T可以是字符串在这里。 是否可以确定是否使用Lambdaj.on()方法创建了arg?

+0

'Lambdaj.on'曾经返回String吗?如果不是,并且'!(arg instanceof String)',则它来自'Lambdaj.on'(或者是null)。 – 2014-10-18 18:34:16

+0

是的,'Lambdaj.on'可以返回任何类型。这真的很酷,因为你可以写'on(SomeClass.class).getX()。getY()' – alkedr 2014-10-18 18:40:10

+0

然后你不能,因为如果你收到一个字符串,它可能是一个字符串,用户直接通过或String由'getY()'返回,并且关于源的任何信息都已丢失。 (另一方面,如果'getY'实际返回一个类型为String的子类并添加了一些接口,则可以测试这些接口的存在。但是,如果没有修改的JVM,这似乎是不可能的,但是,因为String是最终的。) – 2014-10-18 18:43:08

回答

0

阅读Lambdaj源代码(大部分为ArgumentsFactory.java)后,我可以断定这是不可能的。

Lambdaj将数据存储在WeakHashMap<Object, Argument<?>>中,其中关键是返回的东西如on(SomeCLass.classs).getX()。 WeakHashMap比较使用.hashCode().equals()的对象。

相关问题