Страницы

Поиск по вопросам

суббота, 14 декабря 2019 г.

Для чего используются сигнатуры классов, вроде Name<T, Q extends Name<T, Q>>

#java


Для чего используются сигнатуры классов, вроде Name>
    


Ответы

Ответ 1



Такая конструкция позволяет из класса родителя возвращать тип потомка. Поясню на примере. Есть два класса: static class C { public C firstMethod() { return this; } } static class D extends C { public D secondMethod() { return this; } } Мы можем легко написать следующее: new D<>().secondMethod().firstMethod(); Но обратное не получится сделать: new D<>().firstMethod().secondMethod(); Т.к. в классе C в методе возвращается объект типа C, а в нем не определен secondMethod. Для избежания подобной ситуации, пишут следующее: static class A> { public T value; public T firstMethod() { return value; } } static class B extends A> { public B secondMethod() { return this; } } Это позволяет писать: new B<>().firstMethod().secondMethod(); new B<>().secondMethod().firstMethod();

Комментариев нет:

Отправить комментарий