Prikaz jedne poruke
Stara 20.12.2012, 22:57   #1
ivan90BG
Veteran
 
Član od: 3.5.2008.
Lokacija: Beograd
Poruke: 760
Zahvalnice: 81
Zahvaljeno 213 puta na 144 poruka
Određen forumom How to... Java

Sad sam primetio da pored VB, C# i C++ nema How to... Java.

Elem, nije how to pitanje već više jedna observacija.

U sledećem Wikipedia članku http://en.wikipedia.org/wiki/Escape_analysis stoji sledeći primer iz Jave:
Kod:
class A {
	final int finalValue;

	public A( B b ) {
		super();
		b.doSomething( this ); // this escapes!
		finalValue = 23;
	}
 
	int getTheValue() {
		return finalValue;
	}
}

class B {
	void doSomething( A a ) {
		System.out.println( a.getTheValue() );
	}
}
Probao sam i ovo jeste validan Java kod. Odnosno dozvoljeno je da se unutar konstruktora this referenca da kao argument nekoj metodi, ali onda objekat nije konstruisan do kraja, pa samim tim nije validan objekat klase A. I kao što sam i mislio kada se konstruiše A objekat na konzoli se odštampa 0.

Tako da u suštini ovo postavljam kao podsetnik da nije bezbedno pisati ovakav kod, iako Java kompjaler ne daje nikakva upozorenja.

p.s. Ovo takođe nije validan primer escepa-a pointera, jer referenca prosleđena metodi doSomething(A a) neće preživeti po završetku poziva te metode. This će svakako da escape-uje iz konstruktora, samo ne kroz taj poziv. Baš me čudi od Wikipedie. (naravno napisaću bolji primer i izmeniti članak)
ivan90BG je offline   Odgovor sa citatom ove poruke