小编Pra*_*ant的帖子

如何解决scala中的模糊方法引用

这是我遇到的具体问题.我正在使用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)

我明白为什么他们含糊不清.我当然不是在和编译器争论:).我想简单地了解经验丰富的程序员如何解决这个问题.

以下是我可以使用的替代方案

  1. 创建和数组,并Object*定义

    logger debug ("Adding {} = {}", Array(key, value):_*)

  2. 演员 Any

    logger debug ("Adding {} = {}", key.asInstanceOf[Any], value.asInstanceOf[Any])

这两种方法都没有特别吸引人.社区对我有更好的方法或建议吗?

非常感谢!

scala slf4j

6
推荐指数
2
解决办法
2504
查看次数

如何在Scala地图中优雅地处理"Key not found"?

总之,如果在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)

dictionary scala scala-collections

5
推荐指数
1
解决办法
1983
查看次数

什么是“太多结果”的常规Java异常?

我正在编写一个通用API,该API接受参数并返回结果。我希望,如果数据一致,则ID只会返回一个结果。如果得到1个结果,则将其返回。如果得到0个结果,则可以引发“ MissingResourceException”或“ NoSuchElementException”等。但是,如果获得多个结果,应该抛出什么?我查看了明显的地方(Oracle / Java API文档,使用Google搜索,当然还有StackOverflow),但是没有找到。

请注意,我可能无法控制数据,因此“有效的数据/为您的数据求助”的建议虽然有效,但对我没有帮助。

任何帮助表示赞赏。

java exception

5
推荐指数
1
解决办法
1341
查看次数

是否存在使用Builder模式创建的对象不可变的约定?

根据"设计模式:可重用的面向对象软件的元素"一书,

构建器模式将复杂对象的构造与其表示分开,以便相同的构造过程可以创建不同的表示.

通常,Builder模式通过提供逐步构建对象的方法并提供实际返回最终Object的方法来解决具有大量可选参数和不一致状态的问题.

使用构建器模式,我们将使用构建方法来生成不可变的对象.

我的问题:

我可以在生成对象的类中使用构建器模式保持setter方法,允许改变构建对象的可能性吗?

如果我去制作可变对象,我不应该使用构建器模式?

java constructor design-patterns builder immutability

2
推荐指数
2
解决办法
670
查看次数

字节数组输出流。ToString() 没有得到任何字符集

我编写了一个简单的代码来将控制台的输出打印到一个 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

1
推荐指数
1
解决办法
4112
查看次数