Jakou máte verzi JDK? Mně to přeložit jde. Z. -- Zdenek Tronicek FIT CTU in Prague
Martin Schayna napsal(a): > Můžu odpovědět jen na tu poslední část: problém ve zmíněném příkladu > nemá co dělat s použitým JRE. To je jen problém kompilátorů jak > "porozumí" kódu a jaký vygenerují nízkoúrovňový bytecode, který dál > zpracovává (jakýkoliv) JRE a to jedním jediným způsobem a nemusí tápat > "jak to programátor s těmi generiky myslel". Metodu s následující > signaturou přeložily oba kompilátory stejně: > > public static Enum<?> getEnum(Enum<?> defaultValue) > > ovšem její volání javac přeložit nezvládl, protože "neodhadl" že Enum<?> > předaný jako parametr má být stejného typu jako Enum<?> v návratové > hodnotě. Kompilátor Eclipsu to zvládl. Volání metody se signaturou, > která již nedává žádný prostor nejistotě, již oba kompilátory přeložily > bez problému: > > public static <T extends Enum<T>> Enum<T> getEnum(Enum<T> defaultValue) > > Můj závěr: váš kód v budoucnu možná někdo bude chtít přeložit a velmi > pravděpodobně použije javac. Pište ho tedy tak, aby byl přeložitelný > pomocí javac i když během vývoje používáte Eclipsí (nebo jiný) > kompilátor. Ant-ovské nebo Maven-ovské buildování vás k tomu stejně > donutí :-) > > Martin Schayna > > > > On 04/25/2011 10:17 PM, Libor Jelinek wrote: >> Já patřím mezi asi tu masu co nikdy nekompilovala ničím jiným, než >> Oracle javac (taky mi to nejde z pusy, ale snažím se :-)). Nikdy jsem >> se nesetkal s Blackdown, Ice, gjc apod. kompilátory. >> >> A NetBeans používá taky vlastní kompilátor? >> >> Když dám v Eclipsech "Build", tak mi to přeloží jakým kompilátorem? >> Když (jako ve zmíněném příkladu z Stackoverflow) Eclipse zkompiluje, >> ale Sun/Oracle nikoli, tak jak se to pak chová při běhu oproti >> Sun/Oracle JRE? >> >> 2011/4/25 Ladislav Thon <ladi...@gmail.com <mailto:ladi...@gmail.com>> >> >> Já kupříkladu narazil na rozdíly v kompilaci při volání metody >> se signaturou používající Enum<?>, Eclipsí kompilátor to >> zvládl na jedničku, javac měl problémy, viz diskuze na >> stackoverflow.com <http://stackoverflow.com>: >> >> >> http://stackoverflow.com/questions/2220763/java-specific-enums-and-generic-enum-parameters >> >> >> Překladače mohou odvozovat parametrizované typy nad rámec >> minimálních požadavků. Suní překladač (hádám, že "Oraclí" začnu >> říkat nejdřív za pět let) se moc nesnaží, překladač z Eclipsu toho >> zvládne odvodit víc. Neznamená to, že některý z překladačů je >> vadný, jenom že o tom lidi moc neví. >> >> LT >> >> >> >> Ovšem pokud používáte Maven, musíte se stejně podřídit >> standardnímu javac (tedy pokud neexistuje nějaký Maven plugin, >> který by uměl použít pro kompilaci Eclipse -- a i kdyby >> existoval, ani bych ho snad nechtěl použít). >> >> Martin Schayna >> >> >> >> >> On 04/25/2011 02:25 PM, Libor Jelinek wrote: >>> To jsou tedy vlastnosti s ohledem na IDE. Já stejně většinou >>> používám javac z Oraclího JDK přes Ant, tak jsem jen chtěl >>> vědět, zda náhodou není Eclipse compliter třeba >>> několikanásobně rychlější/lepší apod. :-) >>> >>> Díky. >>> Libor >>> >>> Dne 25. dubna 2011 11:17 Filip Jirsák <fi...@jirsak.org >>> <mailto:fi...@jirsak.org>> napsal(a): >>> >>> Kompilátor eclipse například umožňuje přeložit i třídu s >>> chybou (chyba >>> v syntaxi v nějaké metodě apod.), jenom místo kódu dané >>> chybné metody >>> vloží vyhození nějaké runtime výjimky. K tomu asi >>> sunovský kompilátor >>> nedonutíte. Eclipse (IDE) pak ten přeložený kód používá >>> pro code >>> completion a spol., kde je užitečné, aby jedna chybná >>> metoda >>> nezabránila získávat informace o zbytku třídy a ostatních >>> třídách. Na >>> druhou stranu je potřeba si na to dávat pozor a finální >>> verzi přeložit >>> s plnou kontrolou chyb, aby se ten kód, kde se místo >>> nějaké metody >>> bude vyhazovat výjimka "na řádku 353 chybí středník" >>> nedostal na >>> produkci. >>> >>> S pozdravem >>> >>> Filip Jirsák >>> >>> >>> >>> Dne 25. dubna 2011 7:43 Libor Jelinek >>> <ljeli...@virtage.com <mailto:ljeli...@virtage.com>> >>> napsal(a): >>> > A jaký má Eclipse důvod mít vlastní kompilátor? A jaké >>> má Eclipse kompilátor >>> > výhody? Oproti standardnímu javac od Oraclu? >>> > >>> > Libor >>> > >>> > Dne 19. dubna 2011 15:16 Tomáš Záluský >>> <zalu...@centrum.cz <mailto:zalu...@centrum.cz>> napsal(a): >>> >> >>> >> >Eclipse kompilator se da pouzit i standalone, je >>> nejaky duvod proc ho tak >>> >> >nemuzes pouzit v build procesu? >>> >> >>> >> Zřejmě není, nejspíš na něj přejdeme. Budeme ale muset >>> vyřešit, že je to >>> >> pro Javu 1.5. >>> >> Omlouvám se za odmlku, nějak mi toto vlákno vypadlo z >>> pozornosti. >>> >> Díky Romane :-) >>> >> >>> >> Tomáš >>> >> >>> >> >>> >> ================================================ >>> >> ...with Ultimate flying is so easy... >>> >> http://www.frisbee.cz http://www.peaceegg.net >>> >> ================================================ >>> >> >>> >> >>> >> >>> >> >>> >> >>> >> >>> ______________________________________________________________ >>> >> > Od: "Roman Pichlík" <roman.pich...@gmail.com >>> <mailto:roman.pich...@gmail.com>> >>> >> > Komu: Java <konference@java.cz >>> <mailto:konference@java.cz>> >>> >> > Datum: 25.03.2011 11:10 >>> >> > Předmět: Re: javac vs. Eclipse - čísla řádků v >>> .class u víceřádkových >>> >> > výrazů >>> >> > >>> >> >Eclipse kompilator se da pouzit i standalone, je >>> nejaky duvod proc ho tak >>> >> >nemuzes pouzit v build procesu? >>> >> >Dne 24.3.2011 12:11 "Tomáš Záluský" >>> <zalu...@centrum.cz <mailto:zalu...@centrum.cz>> napsal(a): >>> >> >> >>> >> >> Dobrý den, >>> >> >> >>> >> >> narazil jsem na zajímavý problém s generováním >>> čísel řádků do class >>> >> >souboru. >>> >> >> Následující minimalizovaný program vyhodí výjimku, >>> ale stacktracy se >>> >> >> liší >>> >> >číslem řádky podle toho, čím byl program zkompilován. >>> >> >> >>> >> >> public class SourceLines { >>> >> >> >>> >> >> public static class Foo { >>> >> >> public Foo withHoo(String hoo) { >>> >> >> return this; >>> >> >> } >>> >> >> } >>> >> >> >>> >> >> public static String n() { >>> >> >> return null; >>> >> >> } >>> >> >> >>> >> >> public static void main(String[] args) throws >>> Exception { // toto je >>> >> >> radek >>> >> >13 >>> >> >> Foo f = new Foo() >>> >> >> .withHoo("x") >>> >> >> .withHoo(n().toUpperCase()); >>> >> >> } >>> >> >> >>> >> >> } >>> >> >> >>> >> >> Pokud je program zkompilován Eclipsem, vypíše se: >>> >> >> >>> >> >> Exception in thread "main" >>> java.lang.NullPointerException >>> >> >> at SourceLines.main(SourceLines.java:16) >>> >> >> >>> >> >> Pokud je program zkompilován pomocí javac -g, >>> vypíše se: >>> >> >> >>> >> >> Exception in thread "main" >>> java.lang.NullPointerException >>> >> >> at SourceLines.main(SourceLines.java:14) >>> >> >> >>> >> >> Disassemblováním class souboru zjišťuji, že Eclipse >>> při zkompilování >>> >> >respektuje jednotlivé řádky, na kterých se nachází >>> zřetězené metody, >>> >> > zatímco >>> >> >javac to nahází na jeden řádek. Použil jsem >>> >> >http://java.decompiler.free.fr/, ale stejný závěr je >>> zřejmý i z volání >>> >> >javap -l -c. >>> >> >> >>> >> >> Nevíte, zda se dá javac v tomto nějak ovlivnit? >>> Všude jsem našel jen >>> >> >> popis >>> >> >k přepínači -g, ale nic nenasvědčuje, že by to šlo >>> ještě zjemnit. >>> >> >(Mimochodem JDK7 developer preview se chová stejně.) >>> Přijde mi to jako >>> >> > dost >>> >> >podstatná nevýhoda pro používání fluent API, protože >>> to vylučuje zapsání >>> >> >vnořeného výrazu do parametru volané metody. >>> >> >> >>> >> >> Nepovažuji vnořené výrazy za obecně dobrou >>> praktiku, ale někdy to nejde >>> >> >jinak, aniž by se snížila čitelnost. Výše uvedený >>> příklad je z praxe, kdy >>> >> >jsme takto hledali NullPointerException v řetězu přes >>> jednu stránku. >>> >> >Vyvíjeno pod Eclipsem, zkompilováno Mavenem (JDK >>> javac), nasazeno na >>> >> > Tomcat >>> >> >(JDK java). >>> >> >> >>> >> >> Či znáte jiné alternativy? >>> >> >> >>> >> >> Děkuji! >>> >> >> >>> >> >> Tomáš Záluský >>> >> >> >>> >> >> >>> >> >> >>> >> >> ================================================ >>> >> >> ...with Ultimate flying is so easy... >>> >> >> http://www.frisbee.cz http://www.peaceegg.net >>> >> >> ================================================ >>> >> > >>> >> > >>> > >>> > >>> >>> >> >> >> > >