加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

斯卡拉 – 为什么这个引用含糊不清?

发布时间:2020-12-16 19:10:35 所属栏目:安全 来源:网络整理
导读:import swing._object PeerTest extends SimpleSwingApplication { def top = new MainFrame { val p = peer.getMousePosition }} 给 error: ambiguous reference to overloaded definition,both method getMousePosition in class Container of type (x$1:
import swing._

object PeerTest extends SimpleSwingApplication {
  def top = new MainFrame {
    val p = peer.getMousePosition 
  }
}

error: ambiguous reference to overloaded definition,both method getMousePosition in class Container of type (x$1: Boolean)java.awt.Point
and  method getMousePosition in class Component of type ()java.awt.Point
match expected type ?
val p = peer.getMousePosition

但添加类型

val p: Point = peer.getMousePosition

没事.为什么?

编辑:导致问题:

class A {
  def value() = 123
}

class B extends A {
  def value(b: Boolean) = 42  
}

object Main extends App {
  println ((new B).value) 
}

不会引起问题:

class A {
  def value() = 123
  def value(b: Boolean) = 42  
}

class B extends A {}

object Main extends App {
  println ((new B).value) 
}

所以我认为答案必须解释为什么只有当方法在不同的类中时才会发生.

解决方法

有两种方法getMousePosition没有,一种有boolean参数.

如果没有类型注释,Scala不知道您是否希望在一个参数(Function1对象)中引用该方法,或者您想要调用不带参数的方法(产生一个Point).

指定预期类型可明确您的意图.

使用getMousePosition()也应该可以正常工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读