2014-10-18 90 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()的對象。

相關問題