2016-01-11 31 views
1

我正在Java應用程序中重寫日誌記錄類。我們所使用的主要日誌記錄功能之一是使用對象來確定輸出的位置。我想要做的就是擺脫該對象,並具有直接的參數是可選參數,像這樣列出的輸出流:具有可選列出參數的Java函數

Logger.log("Log String Here", stdout, trace, debug, device1); 

哪裏標準輸出,跟蹤和調試是可選的參數,可能不存在,但也可以以任何順序存在。例如,人們也可以寫:

Logger.log("Log String Here", debug, trace, deviceTrace); 

可以這樣用Java 8中使用的可選類完成或者我會到輸出流組合成一個字符串或數組?

+0

您可以重載已知存在的變體,也可以在單個方法中使用可變參數,然後必須執行大量類型檢查才能找到問題的變體。 –

回答

2

Java 8 Optional與您正在尋找什麼沒有關係。 Optional是一些類的實例的包裝,它可以爲你節省一些空的檢查。如果在方法中使用Optional參數,則仍需將每次調用中的所有參數傳遞給log方法(即使其中一些爲空)。

如果所有可選參數都有一個公共基類或接口,則可以使用varargs參數。

例如:

public static void log (String message, OutputStream... output) { 

} 

然而,你不能以任何順序將它們傳遞。例如,您必須決定output[0]的作用,如果output[0]也通過,則只能通過output[1]

另一種方法是使用不同參數組合的多重方法。