У меня есть абстрактный класс в библиотеке я хотел реализовать в Scala, который имеет абстрактный метод копирования с ограниченными наследованиями следующим образом:Перекрытие абстрактного метода класса Java в Scala с ограниченным наследованием
// Java code
public abstract class Base {
public abstract <T extends Base> T copy();
}
Когда я создаю класс в Java это работает отлично, т.е.
public class FromBase extends Base {
@Override
@SuppressWarnings("unchecked")
public FromBase copy();
}
Но если я попытаюсь сделать это в Scala ниже дает method 'copy' overrides nothing
:
class FromBase extends Base {
override def copy(): FromBase = new FromBase()
}
И ниже IDE-предложил работает, но требует вызова с типом v.copy[FromBase]()
работой:
class FromBase extends Base {
override def copy[T <: Tuple](): T = (new FromBase).asInstanceOf[T]
}
Поскольку метод может быть вызван из Java, мне нужна копия без родового работать, как в примере Java.
Есть что-то странное: базовому классу требуется, чтобы метод копирования возвращал некоторый подтип самого базового класса, а последний фрагмент вводит класс кортежа. Это просто опечатка? – stefanobaghino
Да, это опечатка; Я просто упростил существующую проблему, которая, например, работает с классами Tuple. –