我寫一個Java函數,其採用兩個參數:一個是string
類型和其他可以是array of String, Integer, Float, Double, Boolean
或只是一個String
。傳遞整型或字符串數組作爲參數在Java
在JavaScript中,很容易將任何數據作爲參數傳遞,但java中有什麼好的解決方案?
我寫一個Java函數,其採用兩個參數:一個是string
類型和其他可以是array of String, Integer, Float, Double, Boolean
或只是一個String
。傳遞整型或字符串數組作爲參數在Java
在JavaScript中,很容易將任何數據作爲參數傳遞,但java中有什麼好的解決方案?
您可以重載該方法以接受不同的參數。
void doSomething(String x, int[] y) {}
void doSomething(String x, String[] y) {}
void doSomething(String x, String y) {}
這樣的話,你仍然有類型安全(其中Object
參數不給你)。
這將如何優於泛型?考慮到Java對泛型代碼使用強類型檢查。 –
@ b1nary.atr0phy:不確定你的意思。你會如何在這裏使用泛型? – Thilo
我想這是你想要的
公共無效方法1(字符串str,對象... VAL)
方法體裏面,你將不得不處理不同的對象相應
在java只能傳遞方法中定義的數據。解決這個問題的方法可以是使用Object作爲參數。除此之外,您可以創建許多具有相同名稱的方法,但接受不同的參數。 例子:
public void example(String str, Object obj){ /* code */ }
使用時您需要確保檢查它是什麼類型的對象,所以你最終不會試圖用一個整數作爲字符串數組。
我很確定使用Object不是最好的方法,你應該使用不同參數的多個方法。
這是一個非常不好的習慣,因爲它違反了類型安全。 –
當你想要第二個對象作爲任何數據類型的數組,你可以做一些事情 這樣
public void _methodName(String arg1,Object[] arg2)
由於字符串,整數,浮點數,布爾所有從java.lang.Object
繼承,你可以簡單地通過Object[]
作爲第二個參數和你通過參數(字符串,詮釋,....等),無論你想要的。
方法的原型,按您的需求如下:
public void testMethod(String strVal, Object[] genericVal)
現在你必須要通過使用包裝類對象鑄造成需要的格式的正文部分。
以上實施將解決該問題。
使用[泛型]的威力(https://docs.oracle.com/javase/tutorial/java/generics/) – halex
這是很糟糕的面向對象的設計,它有處理多種數據類型的方法。你打算如何處理數據?您可以考慮您感興趣的屬性並將Interface作爲參數傳遞給您。 – Nikolai
我們需要看到更多的代碼才能給出好的建議。通常情況下,你可以避免這樣做。沒有更多的上下文,我會說看看「方法重載」(像System.out.println這樣做)。但是,再次,沒有更多的背景,任何建議只是在黑暗中的危險鏡頭。 – Thilo