В Scala я хотел бы написать абстрактный класс с абстрактным атрибутом path
:Обход абстрактных атрибутов в Java
abstract class Base {
val path: String
}
class Sub extends Base {
override val path = "/demo/"
}
Java не знает абстрактных атрибутов и мне интересно, что будет лучший способ обойти эту проблему ограничение.
Мои идеи:
а) параметр конструктор
abstract class Base {
protected String path;
protected Base(String path) {
this.path = path;
}
}
class Sub extends Base {
public Sub() {
super("/demo/");
}
}
б) абстрактный метод
abstract class Base { // could be an interface too
abstract String getPath();
}
class Sub extends Base {
public String getPath() {
return "/demo/";
}
}
Какой из них вам больше нравится? Другие идеи?
Я стараюсь использовать конструктор, поскольку значение пути не должно вычисляться во время выполнения.
Предупреждение: б) не скомпилируется. Вам нужно добавить модификатор «abstract» к абстрактному методу. – BalusC
Связанный вопрос: http://stackoverflow.com/questions/2371025/abstract-variables-in-java – BalusC
FYI: Scala работает на JVM, которая не поддерживает абстрактные поля, поэтому Scala в основном использует абстрактные методы внутри. – RoToRa