Re: Static method
ojvm24@gmail.com wrote:
I have a static method which has the following signature.
<code>
public static List createBeanCollection(){
}
</code>
I can't chage this, now this is the problem. how can i pass it
parameters
so in the method i can use them and return a dinamic list of objects,
i'm using ibatis
for test purposes i did the following.
<code>
public static List createBeanCollection(){
MiBean m = new MiBean();
m.setNombre("prueba");
List beans = new ArrayList();
beans.add(m);
return beans;
}
</code>
ok, it works fine, but now i want to replace the list i created by
hand with an
object that makes a query over a db, so the code would be this.
<code>
public static List createBeanCollection(){
List beans = miDao.onbtenObjetosPorId(valor);//dao that retrives
object from a db.
return beans;
}
</code>
but i cant use the "valor" parameter, due is not possible to use a no
static-variable
in a static method. at the moment i've resolved it in this way
<code>
public static int valor;//the variable was declared as static.
public static List createBeanCollection(){
List beans = miDao.onbtenObjetosPorId(valor);//i can use it now
return beans;
}
</code>
however this solution is not the best, because i'm expossing the
properties of my class
hope you can help me with this little problem, just remember i can't
change the method
signature.
Thank you in advance.
Probably a better way to handle this is just to use a setter to set the
value of valor.
public class BeanWrapper {
private int valor;
public static void setValor( int v )
{
valor = v;
}
public static List createBeanCollection()
{
return miDao.onbtenObjectosPorId( valor );
}
}
Now this is a tad dangerous, you'll get issues with concurrency and
what-not. But it might suit your needs.
Have you considered a non-static method? It seems to me that would solve
a lot more problems. You could also inject a non-static object into the
wrapper class.
public class BeanWrapper {
private Beans b;
public static void setValor( Beans v )
{
b = v;
}
public static List createBeanCollection()
{
return b.onbtenObjectosPorId();
}
}
where a Beans object has the "valor" injected into it, ie.,
setValor( new Beans( 1 ) );
Now you also have a fully constructed object that you can synchronize
on, for example. And it's private, so no one else can call it but your
createBeanCollection() method.