2017-07-27 43 views
1

我正在處理我的項目,我需要檢查某個特定值是否等於數據集上的值。將對象投射到未知數據類型

這是我創建的功能:

public void setSingleLimit(String columnName, Object limit){ 

} 

其中columnName是我的數據集的我會申請的功能和limit列是在平等條件檢查使用的值。

所以基本上,這個函數將採用limit值,並檢查columnName中的所有值是否等於或不等於該值。

但是,我不知道之前手中的列的類型。但是,我可以獲取函數中列的數據類型。

dataset.first().get(columnName).getClass() 給我的類中的值的列中(我們可以安全地假定列中的所有值將屬於同一類/數據類型)

我想投的limit在函數中接收到的對象爲列類類型,以便能夠進行比較。

我知道我可以重寫函數,以便它可以接受不同的值(int,long,Boolean,String等),這當然會起作用。但是,我想創建一個簡單的方法,以減少複雜性並使我的最終用戶更容易理解。我們還可以安全地假設用戶將在函數中輸入正確的值,這意味着如果列是字符串的列,則用戶不會放置不是字符串的值。

任何關於如何將對象投射到事先未知的類的想法?

謝謝。

+0

我想你將不得不使用java反射,像[this](https://stackoverflow.com/questions/14319760/java-reflection-casting-to-an-unknown-object?rq=1),但我我不能夠進一步幫助你 –

+4

你說你想檢查平等。爲什麼你不能只用'equals(Object o)'?它在Object中聲明並接受一個Object作爲參數。該實現將在運行時動態綁定。 –

+0

你知道可以進去的可能類型的子集嗎?如果是這樣,那麼你可以用這些參數創建私有方法,並在公共方法中使用'if(limit instanceof )'或'if( .getClass()。isAssignableFrom(limit.getClass()))''。我知道它太難看了,但如果沒有太多的限制,你可以忍受它。 – bilak

回答

2

你說你要檢查是否相等。只需使用equals(Object o)即可。它在Object上聲明並接受Object作爲參數。該實現將在運行時動態綁定。

public void setSingleLimit(String columnName, Object limit){ 
    Object columnValue = getValue(columnName); 
    limit.equals(columnValue); // If limit can be null, swap variables 
} 

示例: 如果limitStringequals()String將被使用。 columnValue不是String並不重要,因爲在這種情況下它只會返回false

只要確保不同的equals()實現你想要的。如果你使用自定義類,你可以自己覆蓋它。

1

不使用投,我會做這樣的:

if(limit instanceof anyDataset) { 
//Compare 
}