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

oop – 为什么不为不同的返回类型定义方法重载?

发布时间:2020-12-16 19:08:00 所属栏目:安全 来源:网络整理
导读:在 Scala中,您可以通过使用共享一个通用名称但具有不同参数或不同参数类型的方法来重载方法.我想知道为什么这还不能扩展到方法的返回类型?请考虑以下代码: class C { def m: Int = 42 def m: String = "forty two"}val c = new Cval i: Int = C.mval s: St
在 Scala中,您可以通过使用共享一个通用名称但具有不同参数或不同参数类型的方法来重载方法.我想知道为什么这还不能扩展到方法的返回类型?请考虑以下代码:

class C {
  def m: Int = 42
  def m: String = "forty two"
}

val c = new C
val i: Int = C.m
val s: String = C.m

有没有理由这不行?

谢谢,

文森特.

解决方法

当然,对于不同于返回类型的方法,您可以重载不同的方法.例如,这很好:

def foo(s: String) : String = s + "Hello"
def foo(i: Int) : Int = i + 1

除此之外,您的问题的答案显然是一个设计决策:返回类型是方法签名的一部分,因为任何经历了AbstractMethodError的人都可以告诉你.

然而,请考虑如何允许这种重载可能与子类型一起工作:

class A {
  def foo: Int = 1
}
val a: A = //...lookup an A
val b = a.foo

这是完全有效的代码当然和javac将唯一地解决方法调用.但是如果我将A分类如下:

class B extends A {
  def foo: String = "Hello"
}

这导致原始代码的分辨率被调用哪个方法被破坏.应该是什么我已经通过对某些现有的类进行子类型来逻辑地破坏了一些现有的代码,即使我没有改变该代码或该类.

(编辑:李大同)

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

    推荐文章
      热点阅读