studio sirve settitle que programacion para móviles desarrollo curso aplicaciones java runnable

java - sirve - Runnable con un parámetro?



para que sirve settitle en java (6)

Esta pregunta ya tiene una respuesta aquí:

Necesito un "Runnable que acepte un parámetro", aunque sé que ese ejecutable no existe realmente.

Esto puede señalar un defecto fundamental en el diseño de mi aplicación y / o un bloqueo mental en mi cerebro cansado, por lo que espero encontrar aquí algunos consejos sobre cómo lograr algo como lo siguiente, sin violar los principios fundamentales de OO:

private Runnable mOneShotTask = new Runnable(String str) { public void run(String str) { someFunc(str); } };

¿Alguna idea de cómo lograr algo como lo de arriba?


Podrías ponerlo en una función.

String paramStr = "a parameter"; Runnable myRunnable = createRunnable(paramStr); private Runnable createRunnable(final String paramStr){ Runnable aRunnable = new Runnable(){ public void run(){ someFunc(paramStr); } }; return aRunnable; }

(Cuando utilicé esto, mi parámetro era un ID entero, que utilicé para hacer un hashmap de ID -> myRunnables. De esta forma, puedo usar el hashmap para publicar / eliminar diferentes objetos myRunnable en un manejador).


Primero quisiera saber qué está tratando de lograr aquí para necesitar un argumento que se pase a Runnable () o run (). La forma habitual debería ser tener un objeto Runnable que pase datos (str) a sus hilos estableciendo variables de miembros antes de comenzar. El método run () luego usa estos valores de variables miembro para ejecutar someFunc ()


Puede declarar una clase correcta en el método

void Foo(String str) { class OneShotTask implements Runnable { String str; OneShotTask(String s) { str = s; } public void run() { someFunc(str); } } Thread t = new Thread(new OneShotTask(str)); t.start(); }


Tienes dos opciones:

  1. Definir una clase nombrada. Pase su parámetro al constructor de la clase nombrada.

  2. Haga que su clase anónima se cierre sobre su "parámetro". Asegúrate de marcarlo como final .


Utilizo la siguiente clase que implementa la interfaz Runnable . Con esta clase puedes crear fácilmente nuevos hilos con argumentos

public abstract class RunnableArg implements Runnable { Object[] m_args; public RunnableArg() { } public void run(Object... args) { setArgs(args); run(); } public void setArgs(Object... args) { m_args = args; } public int getArgCount() { return m_args == null ? 0 : m_args.length; } public Object[] getArgs() { return m_args; } }


theView.post(new Runnable() { String str; @Override public void run() { par.Log(str); } public Runnable init(String pstr) { this.str=pstr; return(this); } }.init(str));

Crea una función init que devuelve el objeto e inicializa los parámetros con él.