2013-05-30 103 views
-4

我需要通過一個未知的類名來鑄造一個值。這裏是什麼,我需要做的一個例子:鑄造未知類

Filter filter = session.getFilter(aName); 
for (Object key :filter.getFilterDefinition().getParameterTypes().keySet()){ 
filter.setParameter("param1",filter.getFilterDefinition().getParameterType(key.toString()).getReturnedClass()) 
value) 
} 

因此,大家可以看到,我需要的參數類型的地圖鍵

是否有可能來投?不管怎樣,我怎麼能做這樣的演員。

謝謝

+1

不,不可能。您可以使用'instanceof'運算符來檢查對象引用是否來自某個類。 –

+6

爲什麼要將其轉換爲未知的東西,然後將其分配給'String'引用?這沒有意義。 – Keppil

+2

如果可以的話,可能有人會問這麼做嗎? –

回答

1

我不是100%確定我理解你的問題。但是,如果你有一個對象myObject的,你有這個類的名字,你想將它轉換爲一個字符串

String className = "com.mycompany.Foo"; 
Class<T> c = Class.forName(className); 
T castToT = c.cast(myObject); 

這隻有當你事先知道,似乎有用的類名是一些類的子類或接口T.原因,否則T必須是對象,你正在做很多工作沒有。

+0

這就是我需要的謝謝! 那麼,'anInstance.getClass()。cast(anotherInstance)'工作正常,沒有編譯或runttime錯誤 – javaxiss

+2

@Issam編譯並不意味着它會做你期望的事實... –

+0

@LuiggiMendoza它做我所期望的功能上;-) – javaxiss

0

按照定義的操作,在編譯時「轉換」到另一個類型,所以寫在括號中的類型必須寫成硬編碼。因此操作(o.getClass())obj沒有任何意義。

此外,您施放的類別必須可分配給作業左側寫入的類型。因此表達式:

OneClass o = (OtherClass)obj;

可以是僅當OneClass是從OtherClass分配有效。

第三點。 o.getClass()返回類別o。將某個類的對象投射到同一個類沒有任何意義。

MyClass obj = new MyClass(); 
// obj is an instance of MyClass 

嘗試這個[執行鑄造:

(MyClass)obj

意志產品的編譯警告。

我希望我的解釋有所幫助。我相信你真的想問一個讓你接觸到這個問題的其他問題。我認爲你應該問你的第一個問題。社區可能會幫助你更深入地理解你的問題並找到更好的解決方案。

+0

爲什麼寫在括號中的類型必須是硬編碼的?編寫'OtherClass'或'otherInstance.getClass()'不等於?我相信'getClass()'操作會返回所需的類型 – javaxiss

0

你能告訴用例你需要這樣做嗎?你是否試圖在運行時使用這個策略來轉換引用?請確保你沒有輸入不相關的類型。

使用這種策略的應用程序通常不易維護和調試。

+0

我需要50個聲望分數才能將其移到註釋中。如果這是正確的,那麼如果有人可以幫助把它移到評論部分。我只想添加評論。 –