![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
![]()
Заранее извиняюсь за ошибки.)) Нужна помошь, вопрос такой:
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 ![]() |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
![]()
Вопрос следущий:
Код:
Код:
|
![]() |
![]() |
![]() |
#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
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
#5 | |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
![]() Цитата:
Алекс у меня возвращает Integer от ln.getClass(): Код:
При самом вызове метода мне Eclipse писал что метод относитя к Object.. Так почему же Integer? " просто метод объекта возвращает его класс." ![]() |
|
![]() |
![]() |
![]() |
#6 | |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#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
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
#8 | |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#9 | |
Пользователь
Регистрация: 28.12.2015
Сообщений: 26
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#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 |