当前位置: 首页 > 编程笔记 >

Scala没有参数的实例化类:{} vs()

糜宜民
2023-03-14
本文向大家介绍Scala没有参数的实例化类:{} vs(),包括了Scala没有参数的实例化类:{} vs()的使用技巧和注意事项,需要的朋友参考一下

示例

假设我们有一个MyClass类,没有构造函数参数:

class MyClass

在Scala中,我们可以使用以下语法实例化它:

val obj = new MyClass()

或者我们可以简单地写:

val obj = new MyClass

但是,如果不注意,在某些情况下,可选的括号可能会产生某些意外的行为。假设我们要创建一个任务,该任务应在单独的线程中运行。下面是示例代码:

val newThread = new Thread { new Runnable {
        override def run(): Unit = {
            // 执行任务
            println("执行任务。")
        }
      }
    }

newThread.start   // 没有输出

我们可能认为如果执行此示例代码,则可以打印执行任务。,但令我们惊讶的是,它什么也不会打印。让我们看看这里发生了什么。如果您仔细看一下,我们{}在之后紧接使用了花括号new Thread。它创建了一个匿名类,扩展了Thread:

val newThread = new Thread {
  //创建匿名类扩展线程
}

然后,在这个匿名类的主体中,我们定义了我们的任务(再次创建一个实现Runnable接口的匿名类)。因此,我们可能以为我们使用了构造函数,但实际上(通过忽略optional ),我们使用了在方法主体中未定义任何内容的构造函数。要解决此问题,我们需要使用括号而不是花括号。public Thread(Runnable target)()public Thread()run()

val newThread = new Thread ( new Runnable {
        override def run(): Unit = {
            // 执行任务
            println("执行任务。")
        }
      }
    )

换句话说,此处{}和()不可互换

 类似资料:
  • 这是我的错误行: 这是我的代码:

  • 我有一个成员功能模板如下: 当我编译它时,我得到了一个链接错误,所以我添加了一些它们的显式实例化。 编译器错误消息: /usr/include/c /9/variant:在“constexpr const _Tp”的实例化中 断言失败:T应该在替代项中只出现一次 我为什么得到这个?如何解决?

  • 我试图在谷歌地图中显示一个位置地址,但当我为获取地址启动意向服务时,它将显示错误“无法实例化服务”。 我使用此链接显示位置地址。 这是我的代码: 在这里我开始意图服务:

  • 我们正在开发一个连接到遗留数据库的应用程序。这是非常“非类型化”的,几乎所有数据都使用字符串。更糟糕的是,这远远不是同质的:它使用不同的日期或时间模式(“YYDDMM”、“HHMMSS”、毫秒)和布尔值模式(“Y”/“N”、“X'/' '), 例如。 我们想使用JPA(EclipseLink)和定制转换器。问题是需要一个实现的类,因此我们必须为每个模式创建新的类。我想要的是一个BooleanCon

  • 我是编程界的新手,我从很多方面研究过这个错误,但我什么也没发现。我正在尝试构建一个ListView。Flatter中的生成器,其中itemBuilder来自我的JSON响应数据,如下所示: 我需要获取要使用ListView获取的项的“名称”。建筑工人,这就是我想到的 但在ListView中显示所需内容时,总是会出现错误。建设者我的JSON响应的运行时类型是“\u InternalLinkedHas

  • 我对Scala和Spark RDD编程相当陌生。我使用的数据集是一个CSV文件,其中包含电影列表(每部电影一行)及其关联的用户评分(以逗号分隔的评分列表)。CSV中的每一列都代表一个不同的用户,以及他/她对电影的评价。因此,用户1对每部电影的评分在左侧第二列中表示: 示例输入: 蜘蛛侠,1,2,3,3 睡眠博士,4,4,,1 我得到以下错误: 当我执行下面的几行时。对于下面的程序,第二行代码拆分由