Java-та е тъп боклук
131 отговора
0 прегледа
Java-та е тъп боклук
class A {}
class B extends A {}
class program {
void main() {
A a = new A();
B b = a; // error: incompatible types
b = (B)a; // БУМ
}
}
Аналогичното в C++ мисля няма нужда да ви го разписвам и да ви казвам, че там проблеми няма.
class B extends A {}
class program {
void main() {
A a = new A();
B b = a; // error: incompatible types
b = (B)a; // БУМ
}
}
Аналогичното в C++ мисля няма нужда да ви го разписвам и да ви казвам, че там проблеми няма.
Re: Java-та е тъп боклук
С кой C++ компилатор няма проблеми?
При мене на B *b = a дава:
[линк]
При мене на B *b = a дава:
error C2440: 'initializing' : cannot convert from 'class A *' to 'class B *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
[линк]
Re: Java-та е тъп боклук
Три вида кастове са ти дали. Джавешкия каст гърми директно.
Re: Java-та е тъп боклук
Ама ти верно ли не се сещаш, че за upcast-ване трябва да е обратно, т.е. A *a = b
Това във ООП принципно.
[линк]
Това във ООП принципно.
[линк]
Re: Java-та е тъп боклук
Ъпкеста е имплицитен, ясен и не ме интересува. Говорим за даункест в случая. Изобщо, възможен ли по някъв начин в жавата?
Re: Java-та е тъп боклук
В С# ъпкеста е лесен, понеже компилатора знае по време на компилиране. За даункаст не е съвсем ясно до рънтайм и обикновено се проверява с is и се кества с as.
Няма ли нещо подобно в Джава?
[линк]
--
One day it will make sense.
Няма ли нещо подобно в Джава?
[линк]
--
One day it will make sense.
Re: Java-та е тъп боклук
Напълно вярно си е логически...
Ако искаш пробвай
A a = new B();
B b = a;
би трябавло да работи...ако не знаеш какво е а правиш проверка с инстансъф.
Ако искаш пробвай
A a = new B();
B b = a;
би трябавло да работи...ако не знаеш какво е а правиш проверка с инстансъф.
Re: Java-та е тъп боклук
"Note, that casting can't always be done in both ways. If you are creating a Mammal, by calling "new Mammal()", you a creating a Object that is a Mammal, but it cannot be downcasted to Dog or Cat, because it's neither of them."
Яко. Значи не може.
От тук произтичат някои интересни въпроси към джавистите, свързани с шаблонни задачи и повседневни таскове. Ама сега ше се мъча да измисля няква глупост дет да свърши работа, пък после ше го разискваме.
Яко. Значи не може.
Re: Java-та е тъп боклук
Е това смислено ли ти изглежда:
class A {};
class B {};
A *a = new A;
B *b = reinterpret_cast<B*>(a);
Защото общо взето това правиш на С++
__________________________________
Bang postponed. Not Big enough. Reboot.
class A {};
class B {};
A *a = new A;
B *b = reinterpret_cast<B*>(a);
Защото общо взето това правиш на С++
__________________________________
Bang postponed. Not Big enough. Reboot.
Re: Java-та е тъп боклук
В С++ нямаш проблем с B b = a; ама в Джавата и .НЕТ-а имаш, и той се нарича
Type checking...
Type checking...
Re: Java-та е тъп боклук
Така е, концепцията им е такава да предпазят дева да прави глупости колкото се може повече.
И методите дето ги няма от де идват
в С++?
Не че съм силен в теорията, ама тоя каст ми се вижда шашава работа дори на теория.
Не че съм силен в теорията, ама тоя каст ми се вижда шашава работа дори на теория.
Re: И методите дето ги няма от де идват
И методите дето ги няма от де идват в С++?
Ми не знам, питай колегата Реконструктор :-)
Сега сериозно, ами може и шашава работа да се нарече, ама може и да не. Зависи.
Например във всеки ОО език даункаста към обект (и последващо използване на методи, които не са имплементирани) може да доведе до рънтайм грешка.
Идеята на Джавата и .НЕТ-а е тези грешки да се прихващат в компайл тайма, а не в рънтайма, въпреки че и при двете (Джава и .НЕТ) можеш да направиш даункастване и да изпаднеш отново в runtime error ако не правиш проверки или error handlings.
Т.е. при даункаста винаги трябва да се правят проверки.
Ми не знам, питай колегата Реконструктор :-)
Сега сериозно, ами може и шашава работа да се нарече, ама може и да не. Зависи.
Например във всеки ОО език даункаста към обект (и последващо използване на методи, които не са имплементирани) може да доведе до рънтайм грешка.
Идеята на Джавата и .НЕТ-а е тези грешки да се прихващат в компайл тайма, а не в рънтайма, въпреки че и при двете (Джава и .НЕТ) можеш да направиш даункастване и да изпаднеш отново в runtime error ако не правиш проверки или error handlings.
Т.е. при даункаста винаги трябва да се правят проверки.
Re: Java-та е тъп боклук
Аз пък не разбрах едно - как пък все се хващаш на работа дето джуркат на екзотичен за теб език?
Това не е като Ц-то, онова не е - ми не са, и това е. Толкоз ли няма позиции за Ц кодери?
чети и дишай по-леко
Това не е като Ц-то, онова не е - ми не са, и това е. Толкоз ли няма позиции за Ц кодери?
чети и дишай по-леко
Re: Java-та е тъп боклук
Това го има във всички модерни езици с тайп сейфти - даже и С++ .НЕТ. Трябва да си малоумен да не разбереш защо.
Re: Java-та е тъп боклук
Нещо си се объркал, присвояванията и в ц++ вървят в обратната посока 
Re: Java-та е тъп боклук
на кривата ракета, космоса и малък.
сега пък на теб джавата ти е виновна.
сега пък на теб джавата ти е виновна.
Re: Java-та е тъп боклук
и кви са тея повседневни задачи искащи даункаст?
трябва доста да си изкривя фантазията за да измисля даже некво редко и екзотично приложение на такава глупост.
трябва доста да си изкривя фантазията за да измисля даже некво редко и екзотично приложение на такава глупост.