gpt4 book ai didi

java - Scala 抽象类翻译成 Java

转载 作者:行者123 更新时间:2023-12-01 16:35:05 25 4
gpt4 key购买 nike

Scala 最近让我很头疼,因为我在互联网上找不到信息。由于 Scala 使用一组无限术语定义了自己的语言(我还不知道),因此很难获取信息。

我在 StackOverflow 上就 Scala 和 Java 之间的转换以及 last question 中提出了一些问题。我说我打算放弃这种做法。不过,我想了解发生了什么。

想象一个 Scala 类:

abstract class Block(n: String) {

require(n != null)
val name = n

var log: ArrayList[String]
var inputs: ArrayList[Input[_]]
var outputs: ArrayList[Output[_]]

def newValue
}

到目前为止一切顺利。问题是:

我无法访问类字段(是的,我尝试了 this.inputs())。可能是因为它是这样翻译的:

public abstract class pt.thesis.tiago.Block 
extends java.lang.Object implements scala.ScalaObject{

public java.lang.String name();
public abstract java.util.ArrayList log();
public abstract void log_$eq(java.util.ArrayList);
public abstract java.util.ArrayList inputs();
public abstract void inputs_$eq(java.util.ArrayList);
public abstract java.util.ArrayList outputs();
public abstract void outputs_$eq(java.util.ArrayList);
public abstract void newValue();
public pt.thesis.tiago.Block(java.lang.String);
}

为什么每件事都是抽象的?我不能像Java那样只做我想要的东西是抽象的吗?

最佳答案

关于Scala的学习资料,我看了Programming in Scala就学到了很多。 ,作者:Martin Odersky(Scala 的创建者)、Lex Spoon 和 Bill Venners。另外,docs.scala-lang.org 有很多很好的信息。 ,相当不错Tour of Scala .

关于术语,我认为 Scala 并没有发明那么多术语。这些术语可能来自您不熟悉的语言( ErlangHaskellML 等)或在其他语言中没有得到太多讨论的概念,例如 type theory .

这里的一般原则是 Scala 是一种非常常规的语言。事实上,马丁想要make it simpler and more regular .

在Java中,只有方法可以是抽象的。在 Scala 中,基本上类的任何成员都可以是抽象的。在 Scala 中,要使项目抽象,您可以省略它的定义。因此,语句 var log: ArrayList[String] 实际上创建了一个抽象 var,而不是使用 null 初始化的具体栏。是的,这与您对 Java 的期望不同。但它使 Scala 作为一个整体成为一种更常规的语言。

abstract class Foo {
type SomeType // abstract type

val someVal: SomeType // abstract val

var someVar: SomeType // abstract var

def someMethod(v: SomeType) // abstract method
}

如果您确实想创建一个初始化为 null 的字段,请使用 _ 对其进行初始化。这将创建具体的变量而不是抽象的变量。

关于java - Scala 抽象类翻译成 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10044222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com