这是我遇到的具体问题.我正在使用SLF4J Logger(logger
下面的变量类型)
//After adding to a map
logger debug ("Adding {} = {}", key, value)
Run Code Online (Sandbox Code Playgroud)
这是eclipse中的鼠标悬停(和编译器)告诉我的.
模糊引用重载定义,两种方法调试特性记录器类型(x $ 1:字符串,x $ 2:对象*)单元和方法调试特性记录器类型(x $ 1:字符串,x $ 2:任意,x $ 3:任意)单位匹配参数类型(String,String,String)
我明白为什么他们含糊不清.我当然不是在和编译器争论:).我想简单地了解经验丰富的程序员如何解决这个问题.
以下是我可以使用的替代方案
创建和数组,并Object*
定义
logger debug ("Adding {} = {}", Array(key, value):_*)
演员 Any
logger debug ("Adding {} = {}", key.asInstanceOf[Any], value.asInstanceOf[Any])
这两种方法都没有特别吸引人.社区对我有更好的方法或建议吗?
非常感谢!
总之,如果在Map中找到了值,那么我需要一种功能性的方法来做一件事,如果没找到则做另一件事.请注意,我对返回的值不感兴趣,但已完成操作.
请继续阅读以了解详情.
我有一个服务名称(友好)的地图到URL PATH的一部分(不容易记住).这是初始化.
val serviceMap = Map("read" -> "cryptic-read-path",
"save" -> "cryptic-save-path", "county" -> "cryptic-zip-code-to-county-service.");
Run Code Online (Sandbox Code Playgroud)
我所知道的所有替代方案都会导致带有加载then
部分的if语句,但这是一个简单的404
else
部分.这是我想到的一些
if (serviceMap.contains(service)) {
//Do stuff
} else {
//Issue a 404
}
Run Code Online (Sandbox Code Playgroud)
它等同于谓词逆转
if (!serviceMap.contains(key)) //issue a 404
//Do stuff
Run Code Online (Sandbox Code Playgroud)
上述两种方法都需要我检查然后获取.
另一个(由选项文档阻止)
serviceMap.get(service) match {
case _ : Option[String]=> //Do stuff
case _ => //issue 404
}
Run Code Online (Sandbox Code Playgroud)
还有第三个
serviceMap.get(service).forEach {//Dostuff and return, since it's just one element }
//issue 404 if …
Run Code Online (Sandbox Code Playgroud) 我正在编写一个通用API,该API接受参数并返回结果。我希望,如果数据一致,则ID只会返回一个结果。如果得到1个结果,则将其返回。如果得到0个结果,则可以引发“ MissingResourceException”或“ NoSuchElementException”等。但是,如果获得多个结果,应该抛出什么?我查看了明显的地方(Oracle / Java API文档,使用Google搜索,当然还有StackOverflow),但是没有找到。
请注意,我可能无法控制数据,因此“有效的数据/为您的数据求助”的建议虽然有效,但对我没有帮助。
任何帮助表示赞赏。
根据"设计模式:可重用的面向对象软件的元素"一书,
构建器模式将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示.
通常,Builder模式通过提供逐步构建对象的方法并提供实际返回最终Object的方法来解决具有大量可选参数和不一致状态的问题.
使用构建器模式,我们将使用构建方法来生成不可变的对象.
我的问题:
我可以在生成对象的类中使用构建器模式保持setter方法,允许改变构建对象的可能性吗?
如果我去制作可变对象,我不应该使用构建器模式?
我编写了一个简单的代码来将控制台的输出打印到一个 BytreArrayOutputStream。我正在使用 JDK 1.7。但是,当我想要缓冲区为字符串时,我不能使用方法 BytreArrayOutputStream.ToString (String Charset)..
它没有这个功能。我正在使用 JDk1.7,应该支持它。我在 windows 7 中使用 Netbean。
PrintStream co1=new PrintStream(new java.io.ByteArrayOutputStream());
System.setOut(co1);
StatsUtil.submit(command);
co1.flush();
co1.close();
co1.toString();//acceptted this but it doesn't give me the stream content
String t=co1.toString("UTF-8");//the compliers give me errors the method doesn't get any string parameter
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
java ×3
scala ×2
builder ×1
constructor ×1
dictionary ×1
exception ×1
immutability ×1
slf4j ×1