我正在重写Java应用程序中的日志类。我们使用的一个主要日志记录功能使用一个对象来确定输出的位置。我想要做的是摆脱那个对象,并将输出流直接列在参数中作为可选参数,如下所示:
Logger.log("Log String Here", stdout, trace, debug, device1);
stdout,trace和debug是可选参数,可能不存在,但也可以按任何顺序存在。例如,还可以编写以下内容:
Logger.log("Log String Here", debug, trace, deviceTrace);
可以使用Optional类在Java 8中完成,还是必须将输出流组合成字符串或数组?
答案 0 :(得分:2)
Java 8 a(n)
与您所寻求的无关。 Optional
是某个类的实例的包装器,可以为您节省一些空检查。如果在方法中使用Optional
个参数,则仍需要在每个调用中将所有这些参数传递给Optional
方法(即使其中一些是空的)。
如果所有可选参数都有公共基类或接口,则可以使用varargs参数。
例如:
log
但是,您无法以任何顺序传递它们。例如,您必须确定public static void log (String message, OutputStream... output) {
}
的作用是什么,output[0]
只有在output[1]
也通过时才能通过。
另一种方法是让多个重载方法具有不同的参数组合。