带有可选列出参数的Java函数

时间:2016-01-11 19:31:37

标签: java outputstream

我正在重写Java应用程序中的日志类。我们使用的一个主要日志记录功能使用一个对象来确定输出的位置。我想要做的是摆脱那个对象,并将输出流直接列在参数中作为可选参数,如下所示:

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

stdout,trace和debug是可选参数,可能不存在,但也可以按任何顺序存在。例如,还可以编写以下内容:

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

可以使用Optional类在Java 8中完成,还是必须将输出流组合成字符串或数组?

1 个答案:

答案 0 :(得分:2)

Java 8 a(n)与您所寻求的无关。 Optional是某个类的实例的包装器,可以为您节省一些空检查。如果在方法中使用Optional个参数,则仍需要在每个调用中将所有这些参数传递给Optional方法(即使其中一些是空的)。

如果所有可选参数都有公共基类或接口,则可以使用varargs参数。

例如:

log

但是,您无法以任何顺序传递它们。例如,您必须确定public static void log (String message, OutputStream... output) { } 的作用是什么,output[0]只有在output[1]也通过时才能通过。

另一种方法是让多个重载方法具有不同的参数组合。