powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / определение generic метода в пределах generic класса.
25 сообщений из 36, страница 1 из 2
определение generic метода в пределах generic класса.
    #38581932
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Встретил вопрос в тесте. Кучу времени читал всякие статьи, книги, SO - в голове каша. Я так понимаю, что всё это можно объяснить а уровне концепции. Помогите понять пожалуйста, правда сложно.

Есть такое объявление класса:

Код: java
1.
public abstract class A<K extends Number>{...}



какие строчки из приведенных ниже можно добавить в этот класс?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public abstract <K> K useMe(Object k);
   public abstract <K> A<? extends Number> useMe(A<? super K> k);//1
   public abstract <K> A<? super Number> useMe(A<? extends K> k);//2
   public abstract <K> A<K> useMe(A<K> k);//3
   public abstract <V extends K> A<V> useMe(A<V> k);//4
   public abstract <V super K> A<V> useMe(A<V> k);//5
   public abstract <V extends Character> A<? super V> useMe(A<K> k);//6
   public abstract <V super Character> A<? super V> useMe(A<K> k);//7
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38581933
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
наверное чтобы понять вопрос надо понять причины почему не подходят некоторые из методов
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38581942
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,
А что за тест?

ИМХО проще всего вставить это все в IDE и проверить))
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38581944
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90наверное чтобы понять вопрос надо понять причины почему не подходят некоторые из методовНарушение правил перегрузки функции: неоднозначный набор аргументов
любой аргумент с типом A<...> будет затираться до A .
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38581961
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892redwhite90,
А что за тест?

ИМХО проще всего вставить это все в IDE и проверить))

examlab.org

IDE мне не помогает понять причин, а иногда иподсвечивает неправильно
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38581962
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usmanredwhite90наверное чтобы понять вопрос надо понять причины почему не подходят некоторые из методовНарушение правил перегрузки функции: неоднозначный набор аргументов
любой аргумент с типом A<...> будет затираться до A .


я понимаю, что лениво, но можно более конкретно и подробно, пожалуйста?
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38581988
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

- У всех методов одно и то же имя - это и есть перегрузка метода useMe (overloading).
- Все угловые скобки с типами в сигнатуре методов отбрасываются - механизм https://www.ibm.com/developerworks/ru/library/j-jtp01255/#N10331] cтирания
- Разнообразие возвращаемых результатов не играет в данном случае никакой роли
- В результате, если вызвать метод с НЕ Object агументом, получится неоднозначность и компилятор (из-за стирания) не сможет выбрать нужный метод:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public abstract class A<K extends Number> {
    public abstract ... useMe(Object k);
    public abstract ... useMe(A k);//1
    public abstract ... useMe(A k);//2
    public abstract ... useMe(A k);//3
    public abstract ... useMe(A k);//4
    public abstract ... useMe(A k);//5
    public abstract ... useMe(A k);//6
}
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582014
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

Не, тут вопрос какие строчки можно вставить независимо.
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582034
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

15694405
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582043
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

Ладно, задам конкретный вопрос.

Код: java
1.
2.
3.
public abstract class A<K extends Number>{  
   public abstract <K> A<K> useMe (A<K> k);
}



так нельзя!

авторjava: type argument K is not within bounds of type-variable K

я так понял, что К в методе скрывает K класса ну и как бы A<K> получается не гарантирует, что это K это есть Number

С другой стороны
Код: java
1.
2.
3.
public abstract class A<K extends Number>{  
public abstract <K> A<? extends Number> useMe (A<? super K> k);
}



так сделать можно, но не понимаю почему. ведь A<? super K> это совсем не обязательно удовлетворяет условию A<K extends Number>


В общем исходя из этого делаю вывод, что моя логика нихрена неправильная и прошу вашего совета.
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582045
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90так нельзя!Почему нельзя, можно:
Код: java
1.
2.
3.
public abstract class A<K extends Number>{  
    public abstract A<K> useMe (A<K> k);
}
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582047
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usmanredwhite90так нельзя!Почему нельзя, можно:
Код: java
1.
2.
3.
public abstract class A<K extends Number>{  
    public abstract A<K> useMe (A<K> k);
}



Код: java
1.
2.
3.
public abstract class A<K extends Number>{  
   public abstract <T> A<T> useMe (A<T> k);
}




ок, давай так
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582048
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90,

Код: java
1.
 public abstract <K> A<K> useMe (A<K> k);


и

Код: java
1.
 public abstract  A<K> useMe (A<K> k);




разные вещи
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582053
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redwhite90,
брэйнфака добавляет то , что это
Код: java
1.
2.
3.
public abstract class A<K extends Number>{  
    public abstract <K> A<? extends Number> useMe (A<? super ObjectK> k);
}



перестаёт быть валидной конструкцией
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582055
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90перестаёт быть валидной конструкциейДа, из-за super
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582056
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Код: java
1.
public abstract <K> A<K> useMe (A<K> k);

Здесь конфликт generic метода и generic класса
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582058
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usmanredwhite90,

Код: java
1.
public abstract <K> A<K> useMe (A<K> k);

Здесь конфликт generic метода и generic класса

кажется мы о разном:

public abstract class A<K extends Number>{
// public abstract <K> A<? extends Number> useMe (A<? super Object > k); //нельзя так
public abstract <K> A<? extends Number> useMe (A<? super K> k); //так разрешено
}
}
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582059
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: java
1.
2.
3.
4.
public abstract class A<K extends Number>{
       // public abstract <K> A<? extends Number> useMe (A<? super Object > k); //нельзя так
          public abstract <K> A<? extends Number> useMe (A<? super K> k); //так разрешено. Почему?
} 
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582062
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90
Код: java
1.
public abstract <K> A<? extends Number> useMe (A<? super Object > k); //нельзя так

а зачем тогда <K> ?
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582063
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,
она же хайдится, давайте назовём её ZU в этом методе, если так будет проще
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582066
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
итого получаем

public abstract class A<K extends Number>{

public abstract <ZU> A<? extends Number> useMe (A<? super ZU> k); //так разрешено. Почему?
}
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582067
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин
Код: java
1.
2.
3.
4.
public abstract class A<K extends Number>{

public abstract <ZU> A<? extends Number> useMe (A<? super ZU> k); //так разрешено. Почему?
} 
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582072
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

это валидная конструкция и здесь нет конфликта generic метода с generic классом
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582074
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

Код: java
1.
2.
3.
public abstract class A<K extends Number>{
    public abstract <ZU> A<ZU> useMe (A<ZU> k);
}



тут какой конфликт?
...
Рейтинг: 0 / 0
определение generic метода в пределах generic класса.
    #38582077
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

ZU != K extends Number
...
Рейтинг: 0 / 0
25 сообщений из 36, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / определение generic метода в пределах generic класса.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]