oop - Why can't I create a object in a function in Java? -
code works well, think code b can work correctly, in fact, code b doesn't work correctly. why?
why can't create object in function- private void setfield(context mcontext,matt afield,string name)
?
code a
public class murlpar { public matt diskcount=new matt(); public matt diskindex=new matt(); public murlpar(context mcontext){ setfield(mcontext,diskcount,"pardiskcount"); setfield(mcontext,diskindex,"pardiskindex"); } public class matt { public string name; public string value; } private void setfield(context mcontext,matt afield,string name){ int id = mcontext.getresources().getidentifier(name, "string", mcontext.getpackagename()); afield.name=mcontext.getstring(id); } }
code b
public class murlpar { public matt diskcount; public matt diskindex; public murlpar(context mcontext){ setfield(mcontext,diskcount,"pardiskcount"); setfield(mcontext,diskindex,"pardiskindex"); } public class matt { public string name; public string value; } private void setfield(context mcontext,matt afield,string name){ afield=new matt(); //create object int id = mcontext.getresources().getidentifier(name, "string", mcontext.getpackagename()); afield.name=mcontext.getstring(id); } }
what's happening in code b murlpar
constructor passes reference diskcount
/diskindex
setfield
, within method has name afield
.
you reassign afield
reference newly created object, , manipulate object. note afield
referring separate object, , not whatever referring when entered setfield
.
if you're familiar c can think of you're doing here along these lines:
void setfield(matt *afield) { afield = (matt*) calloc(1, sizeof(matt)); } matt *diskcount; setfield(diskcount);
and expecting diskcount
have changed after call setfield
, won't have.
if want out parameter, can simulate returning newly created object:
private matt setfield(context mcontext, string name){ matt afield = new matt(); //create object int id = mcontext.getresources().getidentifier(name, "string", mcontext.getpackagename()); afield.name=mcontext.getstring(id); return afield; }
and then:
diskcount = setfield(mcontext, "pardiskcount");
Comments
Post a Comment