java - Is it ok to use 'this' in final instance variable declaration? -
is ok use this
keyword in final
instance variable declaration/initialization in java?
like this:
private final someclass foo = new someclass(this);
it worked when tried out. , since not static
variable guess should referring particular instance. felt unsure if advisable or not therefore wanted ask here.
edit: main class android activity class, , someclass-instance needs activity context.
it "technically valid" this. indeed, this
refers particular instance - namely, instance contains instance of someclass
.
but not recommend in general. exact behavior , state of this
passed constructor depends on subtle details. consider following example:
class someclass { public someclass(dangerousselfreference dangerousselfreference) { system.out.println("state: "); system.out.println(" a: "+dangerousselfreference.geta()); system.out.println(" b: "+dangerousselfreference.getb()); system.out.println(" c: "+dangerousselfreference.getc()); system.out.println(" d: "+dangerousselfreference.getd()); system.out.println(" ref: "+dangerousselfreference.getref()); } } public class dangerousselfreference { public static void main(string[] args) { dangerousselfreference d = new dangerousselfreference(); } private string a; private string b = "b"; private final someclass ref = new someclass(this); private final string c = "c"; private string d = "d"; dangerousselfreference() { = "a"; } string geta() { return a; } string getb() { return b; } string getc() { return c; } string getd() { return d; } someclass getref() { return ref; } }
i assume make neat job interview question, because predicting output hard. surprisingly, prints
state: a: null b: b c: c d: null ref: null
notice final
variable c
initialized, non-final variable d
not intialized yet. in contrast that, non-final variable b
(that declared before someclass
instance) intitialized.
such subtelities questionable, , should avoided if possible.
Comments
Post a Comment