gpt4 book ai didi

java - Java 中抽象属性的解决方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:38 24 4
gpt4 key购买 nike

在 Scala 中,我会写一个带有抽象属性 path 的抽象类:

abstract class Base {

val path: String

}

class Sub extends Base {

override val path = "/demo/"

}

Java 不知道抽象属性,我想知道解决此限制的最佳方法是什么。

我的想法:

a)构造函数参数

abstract class Base {

protected String path;

protected Base(String path) {
this.path = path;
}

}

class Sub extends Base {

public Sub() {
super("/demo/");
}

}

b)抽象方法

abstract class Base { // could be an interface too

abstract String getPath();

}

class Sub extends Base {

public String getPath() {
return "/demo/";
}

}

你更喜欢哪一个?其他想法?

我倾向于使用构造函数,因为不应在运行时计算路径值。

最佳答案

Scala 内部所做的就是您描述为方法 B 的内容。

采用以下示例类:

abstract class Test{
val path: String
}

当您使用 scalac 编译它时,它将生成一个抽象 Java 类,其中包含一个名为 attr 的抽象方法,该方法返回一个字符串。发生这种情况的原因是,因为 val 是常量,因此它只能被 getter 模拟,而不能被 setter 模拟。所以如果你想从 Java 访问这个类,你可以简单地覆盖抽象的 getter 方法。

这相当于将要生成的 Java 类(javap 的输出):

public abstract class Test extends java.lang.Object implements scala.ScalaObject{
public abstract java.lang.String path();
public Test();
}

关于java - Java 中抽象属性的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819856/

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