Такой константой не может быть static
, поскольку поля static
являются общими для всех экземпляров класса, включая экземпляры всех подклассов. Вот как реализовать это как нестатическую константу:
public abstract class Foo {
public final String name; // Particular value to be defined in subclass
protected Foo (String name) {
this.name = name;
}
}
public class Bar extends Foo {
public Bar () {
super ("Zoo"); // Here we define particular value for the constant
}
}
Кстати, serialVersionUID
не является частью интерфейса Serializable
.
Синтаксис Scala гибок, но это весьма конечно гибко. В частности, слияние кортежей, параметров и implicits делает это действительно опасной областью в пространстве дизайна библиотеки. Как Вы заметили, вещи, вероятно, будут повреждаться, не работать хорошо и давать загадочные сообщения об ошибках. Я предложил бы, чтобы Вы избежали его, если Вы можете.
В частности, я предлагаю, чтобы Вы сделали следующее определение:
val V = Vector
И затем все Ваши примеры работают, как Вы ожидали бы, без любого implicits, волшебства или загадочных сообщений об ошибках, и за счет только одного символа на Вектор.
val a = V(1,2)+V(.5,.3)
val b = V(1,2)+V(3,4)
val c = V(1,2)
val d = V(.5,.3)
val e = V(1,1)+b
val f = V(1,2)+V(.3,.5)
val g = V(.5,.3)
val h = V(1,1)+a
Это не точно синтаксис, который Вы хотите, но доверяете мне, это сохранит Вас боль и головные боли в конечном счете.
Эти неявные преобразования неоднозначны, и таким образом Scala не будет использовать ни одного из них. Это - причина, почему последние строки не оценят.
Один способ зафиксировать это уехал бы int2vec
полностью, хотя это означает, что все целые числа были бы сначала неявно преобразованы в, Удваивается.