- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
可以在下面的代码中找到问题:
def debug[T](format: String, arg1:T, arg2:Any, args:Any*):T = {
logger.debug(format, (arg1 :: arg2 :: args.toList).toArray)
arg1
}
因为我作为第二个参数传递的是一个Any的数组,所以这段代码应该调用了SLF4J的调试方法
public void debug(String format, Object[] argArray);
还
public void debug(String format, Object arg);
最终被调用。
让我举个例子。
当我打电话
debug("The four parameters are {} as String, {} as Integer, {} as String and {} as Integer.", "1", 2, "3", 4)
记录
DEBUG - The four parameters are [1, 2, 3, 4] as String, {} as Integer, {} as String and {} as Integer.
代替
DEBUG - The four parameters are 1 as String, 2 as Integer, 3 as String and 4 as Integer.
注意 1:我假设第一个调用会基于 scala.Array Scaladoc 工作.
Represents polymorphic arrays. Array[T] is Scala's representation for Java's T[].
注意 2:提出我的问题的代码可以在 https://github.com/alexmsmartins/UsefullScalaStuff/blob/master/src/main/scala/alexmsmartins/log/LoggerWrapper.scala 找到
这是我在我的 Scala 项目中使用的 slf4j 的一个小包装器。
最佳答案
您传递的是 Array[Any]
,而不是 Array[Object]
。您可以尝试将类型从 Any
更改为 AnyRef
(在这种情况下您将无法传递 AnyVal
,例如 整数
)。您还可以在 .toArray
之后调用 .asInstanceOf[Array[AnyRef]]
,在这种特殊情况下,这不会给您带来麻烦,因为删除是相同的.
关于java - 如何让 JVM 在多态方法调用中将 scala.Array[T] 识别为 java 数组 T[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8083840/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!