作者:淘气111006 | 来源:互联网 | 2023-01-05 18:15
我正在学习Scala
使用IntelliJ
IDE.
当我使用class Element
和override contents
方法时,IDE为contents
带有定义的方法提供了默认实现???
下面是本书的代码 Programming in Scala, 3rd edition
元件
abstract class Element {
def contents: Array[String]
def height = contents.length
def width = if (height == 0) 0 else contents(0).length
}
ArrayElement
class ArrayElement(cont: Array[String]) extends Element {
override def contents: Array[String] = ??? // impl provided by IDE
}
我没有看到运行程序有任何问题,但是当我访问该方法时,我得到了异常
Exception in thread "main" scala.NotImplementedError: an implementation is missing
at scala.Predef$.$qmark$qmark$qmark(Predef.scala:284)
at org.saravana.scala.ArrayElement.contents(ScalaTest.scala:65)
有人可以解释???
它的用途和用途吗?
1> puhlen..:
???
被设计为占位符,是一个定义的方法Predef
(默认情况下会自动导入)
它的定义是
def ??? : Nothing = throw new NotImplementedError
所以它有返回类型Nothing
,它只是抛出NotImplementedError
.此定义允许它用作您定义但尚未实现但仍希望能够编译程序的方法的占位符实现.
Nothing
是每种类型的子类型,???
无论期望什么类型,它都会生成有效的实现.