2016-01-11 19 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]

另一种方法是使用不同参数组合的多重方法。