2017-06-10 42 views
-2

對於大學項目我必須修復軟件的維護。 Kiuwan報告問題「避免返回Java.lang.Object,而是將其轉換爲特定類型。」在許多方法上,爲了解決所有問題,我應該重新設計軟件! 有沒有辦法規避Kiuwan並「解決」這個問題? 這是解決方法的一個例子:避免返回Java.lang.Object,而是將其轉換爲特定類型

public Object popupMenu(Object component) { 
    return ThinletLayoutInterface.popupMenu(component, this); 
} 
+2

我不明白這個問題。只需將返回類型更改爲想要返回的內容即可?你知道'public Object popupMenu(Object component)'的每個部分是什麼意思嗎?如果不是,那應該是你的問題(你可能首先應該去Google或教科書)。另一方面,如果出於某種原因不能將返回類型更改爲想要的,則應詳細說明並提供[mcve]。 – Dukeling

+0

Kiuwan分析儀警告我「避免返回Java.lang.Object」問題,因此維護值很低。現在我不能改變它們作爲一種返回對象所擁有的所有方法的簽名,因爲這會花費我重新設計系統。有沒有辦法通過將Object替換爲與Object完全相同的功能來避免Kiuwan? – tommy932

+0

如果您需要重新設計系統以避免返回對象,則這指向設計得非常糟糕的系統,最有可能**應重新設計。不,繼承不能像那樣工作 - 對象是所有類繼承的唯一類,您不能用另一個類替換它,該類也適用於所有類型的對象。 – Dukeling

回答

0

我真的不知道該怎麼做ThinletLayoutInterface。但是,如果你絕對在每次調用此方法,你想到的東西拿回來式可知,你可以欺騙,一些cheesyness做

public <T> T popupMenu(Class<T> cls, Object component) { 
    return (T) ThinletLayoutInterface.popupMenu(component, this); 
} 

,然後調用它,假設你知道一個例子這個調用應該返回一個Widget。

Widget w = populateMenu(Widget.class, myComponent); 

這就給調用者帶來了所有類型安全的負擔,而且正如我所說的那樣,這是一個騙子。

相關問題