Это немного ленивый вопрос, но вы получите ответ так: -)
У меня есть класс Java, который возвращает экземпляры самого себя, чтобы позволить цепочку
(например, ClassObject.doStuff (). doStuff ())
Например:
public class Chainer
{
public Chainer doStuff()
{
/* Do stuff ... */
return this;
}
}
Я бы хотел расширить этот класс. Есть ли способ, возможно, с использованием обобщений, расширить этот класс без необходимости перезаписывать сигнатуру каждого метода?
например. нет:
public class ChainerExtender extends Chainer
{
public ChainerExtender doStuff()
{
super.doStuff();
return this;
}
}
Я пытался:
public class Chainer
{
public <A extends Chainer> A doStuff()
{
/* Do stuff ... */
return (A)this;
}
}
public class ChainerExtender extends Chainer
{
public <A extends Chainer> A doStuff()
{
/* Do stuff ... */
return super.doStuff();
}
}
Но это не сработало, выдав ошибку:
type parameters of <A>A cannot be determined;
no unique maximal instance exists for type variable A with upper bounds A,Chainer
Я вынужден иметь объявления класса, такие как:
public class Chainer<T extends Chainer<T>> {}
public class ChainerExtender extends Chainer<ChainerExtender>
По этот вопрос ?