Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / return-type-substitutable. почитайте со мной jls. / 19 сообщений из 19, страница 1 из 1
12.05.2014, 16:22
    #38638937
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
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
12.05.2014, 16:24
    #38638939
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
P.S. 2 сигнатуры равны если равны имена методов и список параметров одинаковый.
...
Рейтинг: 0 / 0
12.05.2014, 20:21
    #38639173
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
Добавляем пропущенную закрывающую скобку, опускаем ошибки отсутствия импортов и читаем:
Код: 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
12.05.2014, 22:08
    #38639227
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
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
12.05.2014, 22:16
    #38639236
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
redwhite90-сигнатуры должны быть разные, а возвращаемые типы - одинаковые. -Так это ж прям как у меня. И почему же ошибка компиляции ?Потому, что совершенно другая ошибка.
Класс, реализующий интерфейс обязан или определить или перекрыть все методы интерфейса. Вы этого не сделали.
@Override требует перекрытия, но метода с таким именем и списком аргументов - нет. Вторая ошибка.
...
Рейтинг: 0 / 0
12.05.2014, 23:02
    #38639258
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
Basil A. Sidorov,

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

на самом деле я хочу научиться читать jls. По-моему достаточно интересно?
...
Рейтинг: 0 / 0
13.05.2014, 00:13
    #38639299
maxkar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
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
13.05.2014, 00:24
    #38639307
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
авторIf a method declaration d1 with return type R1 overrides or hides...
кажется эта фраза подразумевает, что правила hide or override выполнены.
...
Рейтинг: 0 / 0
13.05.2014, 00:25
    #38639308
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
maxkar,

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

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

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

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

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

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

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

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

а спецификация и документация это разные вещи ?
...
Рейтинг: 0 / 0
13.05.2014, 16:12
    #38639969
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
redwhite90а спецификация и документация это разные вещи ?
В данном случае под спецификацией понимаются строгие технические требования.
А под документаций - инструкция к применению.
...
Рейтинг: 0 / 0
13.05.2014, 16:52
    #38640017
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
Кстати:
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
13.05.2014, 17:18
    #38640066
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
no56892,

требуется ответ по jls ?
...
Рейтинг: 0 / 0
13.05.2014, 17:22
    #38640072
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
return-type-substitutable. почитайте со мной jls.
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
Форумы / Java [игнор отключен] [закрыт для гостей] / return-type-substitutable. почитайте со мной jls. / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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