Comments 21
спасибо за статью, всё понятно
но ведь точно тоже самое есть на вики?
но ведь точно тоже самое есть на вики?
0
1) убираем ручное приведение типов
2) выносим проверку приведения типа с уровня Runtime на этап компиляции
2) выносим проверку приведения типа с уровня Runtime на этап компиляции
0
эм. из-за того, что вы изменили комментарий, мой стал неактуален.
Отвечу на ваш изменённый.
А где на вики? по той ссылке, что приведена в начале поста, описан только сам «текучий интерфейс», но там нет примера применения с использованием наследования классов
Отвечу на ваш изменённый.
А где на вики? по той ссылке, что приведена в начале поста, описан только сам «текучий интерфейс», но там нет примера применения с использованием наследования классов
0
применение там есть
Некоторые API в Java реализуют такой интерфейс, например Java Persistence API:
public Collection<Student> findByNameAgeGender(String name, int age, Gender gender) {
return em.createNamedQuery("Student.findByNameAgeGender")
.setParameter("name", name)
.setParameter("age", age)
.setParameter("gender", gender)
.setFirstResult(1)
.setMaxResults(30)
.setHint("hintName", "hintValue")
.getResultList();
}
0
del
0
UFO just landed and posted this here
Недавно видел лекцию на подобную тему. Может кому пригодится: Рекурсивное расширение типа
0
По теме Java Wildcards действительно очень мало информации на русском языке. Спасибо, что внесли свой вклад.
Жду в следующий раз рассказ про
Жду в следующий раз рассказ про
<T super class>
0
я обычно решал такую задачу через типизацию this:
как-то так — и интерфейс не нужен и доп касты, как вот здесь
((ChildClass) new ChildClass().setBaseParam(BASE_PARAM)).setChildParam(CHILD_PARAM);
PS простите за код — что-то не выходит у меня с разметкой
Base<T extends Base<T>> {
protected T getThis() { return this; }
public T setBaseParam(int base) { this.base = base; return getThis(); }
}
Child extends Base<Child> {
public T setChildParam(int child) { ... return getThis(); }
}
как-то так — и интерфейс не нужен и доп касты, как вот здесь
((ChildClass) new ChildClass().setBaseParam(BASE_PARAM)).setChildParam(CHILD_PARAM);
PS простите за код — что-то не выходит у меня с разметкой
0
быстрое гугление дало вот такую более подробную статью weblogs.java.net/node/642849
0
Согласен, интерфейс тут не обязателен — изначально, когда писал пост, было 2 дочерних класса и думал показать пример с ними, но позже решил упростить и оставил только один дочерний класс, а вот интерфейс остался :)
в коммите добавил в пакет
в коммите добавил в пакет
ru.itbasis.demo.java.self.child.woi
пример без интерфейса.0
и еще, вот это:
неверно.
У Вас типизированный класс BaseClass используется в unchecked версии (примерно то же самое, как написать List x = (List) new ArrayList()). Это может привести к трудноуловимым проблемам с типизацией позднее. См мой вопрос stackoverflow.com/questions/3067891/what-would-be-different-in-java-if-enum-declaration-didnt-have-the-recursive-pa
BaseClass<T extends BaseClass>
неверно.
У Вас типизированный класс BaseClass используется в unchecked версии (примерно то же самое, как написать List x = (List) new ArrayList()). Это может привести к трудноуловимым проблемам с типизацией позднее. См мой вопрос stackoverflow.com/questions/3067891/what-would-be-different-in-java-if-enum-declaration-didnt-have-the-recursive-pa
0
Да, спасибо за замечание.
Кстати, IDEA тоже не очень корректно отрабатывает в таких ситуациях: youtrack.jetbrains.com/issue/IDEA-126457
Кстати, IDEA тоже не очень корректно отрабатывает в таких ситуациях: youtrack.jetbrains.com/issue/IDEA-126457
0
«Слегка нарушим правило», чтобы потом нарушить принцип разделения команд и запросов? :)
0
Sign up to leave a comment.
Возвращаем дочерний класс из родительского. Факультатив