|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
28.12.2015, 18:15 | #1 |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
Java 8 типизация
Заранее извиняюсь за ошибки.)) Нужна помошь, вопрос такой:
Gen raw = new Gen (new Double(98.6)); // Создаётся обьект класса Gen который содержит значение типа дабл. double d = (Double)raw.getob(); // Не пойму эту строку - если я убераю кастинг к даблу то компилятор ругается и пишит что привести от Object к примитиву double не возможно. Зачем нужно преобразование к дабл если класс Gen содержит значение типа дабл? Если вызвать и распечатать System.out.println(raw.getOb().getC lass()); // То получем class java.lang.Double. Почему при стирании кастинга к даблу, компилятор пишит что getob(); возврашает Object ? Надеюсь вопрос был понятен.. |
29.12.2015, 01:27 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Так надо было создавать Gen<Double>, а не просто Gen.
А Object потому что так реализованы generic'и в Java — на самом деле после компиляции не существует никаких Gen<T>, Gen<Double>, ... Везде будет просто Object вместо Т (гуглить erasure, ну и в учебнике наверняка есть дальше, скорее всего прям примерно на следующей странице) И поэтому (и для обратной совместимости, например для стандартных классов коллекций) в отличии от какого-нибудь C# никто не запрещает создавать экземпляр generic класса без указания типа, просто тогда и компилятор будет сразу считать его как Object. Например был ArrayList в Java 1.0. Потом появилась возможность использовать и ArrayList<T>, но старый вариант никуда не девался и старый код работающий с Object не сломался.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 29.12.2015 в 10:28. |
15.01.2016, 21:56 | #3 |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
Стирание типов в джава
Вопрос следущий:
Код:
Код:
|
15.01.2016, 22:35 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Потому же почему in2.getClass() вернет Double. Тут generic'и вроде не причем, просто метод объекта возвращает его класс.
От того что в рантайме нет информации о том что такое T, экземпляр же все равно не становится пустым Object'ом, а остается Integer'ом и обладает всеми его возможностями.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
16.01.2016, 08:34 | #5 | |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
Цитата:
Алекс у меня возвращает Integer от ln.getClass(): Код:
При самом вызове метода мне Eclipse писал что метод относитя к Object.. Так почему же Integer? " просто метод объекта возвращает его класс." |
|
16.01.2016, 08:35 | #6 | |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
Цитата:
|
|
16.01.2016, 11:02 | #7 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ну если создать класс Parent с методом getSomething возвращающим "hello1", и класс Child унаследованный от Parent и с переопределенным методом getSomething возвращающим "hello2", то при
Код:
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
16.01.2016, 12:29 | #8 | |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
Цитата:
|
|
16.01.2016, 12:44 | #9 | |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
Цитата:
|
|
16.01.2016, 13:20 | #10 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Ну getClass наверно как-то более хитро реализован внутри JVM чем просто переопределение, но смысл в том что он возвращает класс экземпляра, а не тип переменной в которой хранится ссылка на этот экземпляр.
В том месте куда ссылается ln все равно же лежит экземпляр Integer, а не Object.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. Последний раз редактировалось Alex11223; 16.01.2016 в 13:22. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Типизация. Строки. Типы в типах. | Человек_Борща | Общие вопросы Delphi | 4 | 04.10.2012 21:40 |
всеобщая ЧИПизация КАРТизация и ТИПизация всей страны | grenles | Свободное общение | 10 | 01.03.2011 21:18 |
Помогите справиться с java.lang.OutOfMemoryError: Java heap space | Levilaulada | Помощь студентам | 1 | 17.05.2009 10:59 |