powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / return-type-substitutable. почитайте со мной jls.
19 сообщений из 19, страница 1 из 1
return-type-substitutable. почитайте со мной jls.
    #38638937
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jlsIf a method declaration d1 with return type R1 overrides or hides the declaration of another method d2 with return type R2, then d1 must be return-type-substitutable (§8.4.5) for d2, or a compile-time error occurs


Чтобы при override/hide не было ошибок компиляции метод в потомке должен быть return-type-substitutable относительно метода в предке
------------------------------------
читаем что значит return-type-substitutable:


jlsA method declaration d1 with return type R1 is return-type-substitutable for another method d2 with return type R2 iff any of the following is true:

If R1 is void then R2 is void.

If R1 is a primitive type then R2 is identical to R1.

If R1 is a reference type then one of the following is true:

--R1, adapted to the type parameters of d2 (§8.4.4), is a subtype of R2.

--R1 can be converted to a subtype of R2 by unchecked conversion (§5.1.9).

--d1 does not have the same signature as d2 (§8.4.2), and R1 = |R2|.

все пункты понятны, кроме этого:

jlsd1 does not have the same signature as d2 (§8.4.2), and R1 = |R2|

как так то?

я может чего-то не учитываю но для меня это выглядит как будто возвращаемые типы должны быть одинаковые , а сигнатуры любые лишь бы не одинаковые.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
interface Foo {
        List<String> foo(String arg1, String arg2);
}

class Bar implements Foo {
    @Override
    public List<String> anotherName(String arg1, String arg2,Object obj) {
           return  null;
    }



ведь этот код вроде соответствует правилу, но это ж очевидный compilation fail.

Проясните пожалуйста.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38638939
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
P.S. 2 сигнатуры равны если равны имена методов и список параметров одинаковый.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639173
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавляем пропущенную закрывающую скобку, опускаем ошибки отсутствия импортов и читаем:
Код: plaintext
1.
2.
3.
4.
5.
error: Bar is not abstract and does not override abstract method foo(String,String) in Foo
class Bar implements Foo {
^
error: method does not override or implement a method from a supertype
    @Override
    ^
Возникает вопрос дедушки из сказки о золотой рыбке: Чем теперь твоя душенька недовольна?
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639227
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

извиняюсь за пропущеннную скобку.

Смотрите по jls чтобы НЕ было ошибок компиляции надо, чтобы опреление метода в потомке был return-type-substitutable

смотрим определение в родителе

Код: java
1.
 List<String> foo(String arg1, String arg2)


в потомке:
Код: java
1.
public List<String> anotherName(String arg1, String arg2,Object obj) 




читаем, чтобы сигнатуры были return-type-substitutable нужно выполнить определенные условия в зависимости от возвращаемого значения предка. если возвращаемое значение...
void... - не наш случай
примитив .... - не наш случай.
ссылочный тип. Во! наш вариант. если верно хотя бы что-то одно из следующего:
-....
-....
-сигнатуры должны быть разные, а возвращаемые типы - одинаковые. -Так это ж прям как у меня. И почему же ошибка компиляции ?


Я думаю я объяснил свою логику. Видимо где-то я не учёл что-то. Расскажите что) Только пожалуйста с привязкой к jls.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639236
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90-сигнатуры должны быть разные, а возвращаемые типы - одинаковые. -Так это ж прям как у меня. И почему же ошибка компиляции ?Потому, что совершенно другая ошибка.
Класс, реализующий интерфейс обязан или определить или перекрыть все методы интерфейса. Вы этого не сделали.
@Override требует перекрытия, но метода с таким именем и списком аргументов - нет. Вторая ошибка.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639258
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

да я понимаю вас. Представьте, что вы java не знаете и делаете всё по данной мною инструкции. Какой пункт я нарушил ?
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639269
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я умываю руки и могу только повторить: JLS (стандарты С/С++) - только в качестве развлечения.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639284
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

на самом деле я хочу научиться читать jls. По-моему достаточно интересно?
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639299
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

If a method declaration d1 with return type R1 overrides or hides the declaration of another method
Выделение мое. У вас предусловие не выполняется. Определение overrides/hides дается где-то в другом месте.

У вас там как раз у d1 и d2 сигнатуры разные, а значит это правило к ним не применимо (не подходит к предусловию).

А нарушаете вы вообще 8.1.1.1: If a normal class that is not abstract contains an abstract method, then a compile-time error occurs. <skip>

A class C has abstract methods if any of the following is true: <skip>
A direct superinterface (§8.1.5) of C declares or inherits a method (which is therefore necessarily abstract) and C neither declares nor inherits a method that implements it.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639307
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторIf a method declaration d1 with return type R1 overrides or hides...
кажется эта фраза подразумевает, что правила hide or override выполнены.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639308
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maxkar,

да да да
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639486
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90на самом деле я хочу научиться читать jls. По-моему достаточно интересно?Нет там ничего интересного, пока вы не начали делать инструментальные средства.
Сотни страниц сухого и сжатого текста, объясняющие тривиальные, не очень тривиальные и очень нетривиальные вещи.

P.S. Жил в девятнадцатом веке в одной из российских губерний плотник. И было у него увлечение - математика.
Записывал свои мысли в тетрадку, самостоятельно придумав обозначения.
И когда решил, что получилось у него нечто интересное - отвёз результаты своих тридцатилетних исследований в город.
Преподавателю математики.
Преподаватель оказался человеком упорным и дотошным - разобрался и в обозначениях и в результатах.
Плотник самостоятельно разработал дифференциальное исчисление.
Преподаватель сказал ему об этом примерно так, что вот, великие математики ... Около века назад ... А вы - сами ... Как здорово.
А плотник так сильно огорчился потерянными впустую десятилетиями, что слёг с нервным расстройством и умер.

P.P.S. Правда или нет - не знаю. Очень давно или в журнале читал или по радио слышал.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639533
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

jlsIf a method declaration d1 with return type R1 overrides or hides...

это когда равны имена методов и спискок параметров с погрешностью до type-erasure.

---------
Basil A. Sidorov - забавная история.

Но иногда требуется что-то уточнить...узнать не про конкретное выполнение конкретного кода, а ширину подобных случаев - приходится глядеть в jls. Смотришь и волосы дыбом становятся
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639570
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Но иногда требуется что-то уточнить...узнать не про конкретное выполнение конкретного кода, а ширину подобных случаев - приходится глядеть в jls. Смотришь и волосы дыбом становятсяУчебники надо смотреть - там грамотные и квалифицированные люди, имеющие педагогический навык, делают спецификации языка доступными для простых смертных.
Вы когда URLConnection используете RFC на http тоже читаете?
Или, всё-таки, делаете по примерам и документации, а со спецификацией разбираетесь тогда, когда есть реальная проблема?
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639963
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,

хм у меня глупый наверное, но всё таки вопрос.

а спецификация и документация это разные вещи ?
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38639969
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90а спецификация и документация это разные вещи ?
В данном случае под спецификацией понимаются строгие технические требования.
А под документаций - инструкция к применению.
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38640017
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати:
JLS
автор3.10.4. Character Literals
...
A character literal is always of type char (§4.2.1).

Код: java
1.
byte bbb = 'F'; // LOL? а где cannot convert from char to byte?
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38640066
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
no56892,

требуется ответ по jls ?
...
Рейтинг: 0 / 0
return-type-substitutable. почитайте со мной jls.
    #38640072
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.2
A narrowing primitive conversion may be used if the type of the variable is byte, short, or char, and the value of the constant expression is representable in the type of the variable.

A narrowing primitive conversion followed by a boxing conversion may be used if the type of the variable is :

Byte and the value of the constant expression is representable in the type byte .

Short and the value of the constant expression is representable in the type short.

Character and the value of the constant expression is representable in the type char.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / return-type-substitutable. почитайте со мной jls.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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