[Javalist] Segítség! Java7 compiler BUG???

Suller Andras suller.andras at gmail.com
2012. Júl. 22., V, 16:27:06 CEST


Na, meg kicsit boncolgattam a topik indito temat:

public class Test2 {
	public Number test1(Number n) {
		return (n instanceof Long) ? 2L : 1.0;
	}
	public Number test2(Number n) {
		Number L1 = new Long(2L);
		Number D1 = new Double(1.0);
		return (n instanceof Long) ? L1 : D1;
	}
	public Number test3(Number n) {
		return (n instanceof Long) ? (Number) new Long(2L) : (Number) new Double(1.0);
	}
	public Number test4(Number n) {
		return (n instanceof Long) ? (Number) 2L : (Number) 1.0;
	}
	public static void main(String[] args) {
		Test2 m = new Test2();
		System.out.println(m.test1(1L) instanceof Long);
		System.out.println(m.test1(1.0) instanceof Double);

		System.out.println(m.test2(1L) instanceof Long);
		System.out.println(m.test2(1.0) instanceof Double);

		System.out.println(m.test3(1L) instanceof Long);
		System.out.println(m.test3(1.0) instanceof Double);

		System.out.println(m.test4(1L) instanceof Long);
		System.out.println(m.test4(1.0) instanceof Double);
	}
}

A generalt kodot nem neztem, de a "(Number) 2L : (Number) 1.0"
hasznalhato workaround-nak tunik. Bar szerintem ronda.

Andras

2012/7/22 Peter Verhas <peter at verhas.com>:
> No ha már ennyit rágjuk ezt a témát:
>
> A még egyszer ide már nem mellékelt kódot nem hirtelen felindulásból írtam.
> Először volt egy production kód, amiben felfedeztem, hogy valami nem kerek.
> Lokalizáltam a problémát, majd generáltam egy másik projektet, amelyikkel
> demonstrálni tudom. Végül a korábbi levélben mellékelt kód szintre
> egyszerűsítettem le demonstrációs céllal, hogy a levélbe be tudjam másolni.
>
> Ilyenkor azért az ennyire leegyszerűsített kódot is kipróbálom, és
> copy-paste kerül bele a levélbe, hogy ne legyen az, hogy ez nem produkálja a
> problémát, és akkor lehet azon rágódni, hogy "de nekem nem is produkálja,
> nekem meg igen".
>
> Btw: az "egy metódus egy return" ízlés kérdése is. Van amikor ettől el
> szoktam térni. Például ha van egy metódus, ami bizonyos speciális bemeneti
> értékek esetén null-t ad vissza, akkor a kód struktúrája nálam sokszor:
>
>
> modifiers metódus(paraméterek){
>
>   if( paraméterek vizsgálata azt mondja, hogy nem jók )return null;
>
>   végezzük az igazi számolást
>   return igazi eredmény;
> }
>
>
> Persze ez azonos azzal, hogy
>
> modifiers metódus(paraméterek){
>   deklaráljuk a returnVar-t;
>
>   if( paraméterek vizsgálata azt mondja, hogy nem jók )
>      returnVar = null;
>   else
>     végezzük az igazi számolást
>
>   return igazi eredmény;
> }
>
> (A {-t meg }-t ne keressétek, ez nem kód, hanem kód struktúra demo!) Ha
> production code (hobby) projektre kíváncsi valaki tőlem (mondjuk elég
> perverz), akkor aktuálisan a https://github.com/verhas/jScriptBasic
> projektet lehet nézegetni.
>
> --
> Verhás Péter
> peter at verhas.com
> +36(30)9306805
> skype: verhas
>


További információk a(z) Javalist levelezőlistáról