al principio pensé que esto se hace con una interfaz, pero luego descubrí que debería hacerse usando una clase abstracta.
lo he resuelto de esta manera:
edición: últimamente sólo tiene que utilizar esto:
public static abstract class callback1<T>{
public abstract void run(T value);
}
public static abstract class callback2<T,J>{
public abstract void run(T value,J value2);
}
public static abstract class callback3<T,J,Z>{
public abstract void run(T value,J value2,Z value3);
}
public static abstract class callbackret1<R,T>{
public abstract R run(T value);
}
public static abstract class callbackret2<R,T,J>{
public abstract R run(T value,J value2);
}
public static abstract class callbackret3<R,T,J,Z>{
public abstract R run(T value,J value2,Z value3);
}
devolución de llamada.java
public abstract class CallBack<TRet,TArg> {
public abstract TRet call(TArg val);
}
definen método:
class Sample2
{
CallBack<Void,String> cb;
void callcb(CallBack<Void,String> CB)
{
cb=CB; //save the callback
cb.call("yes!"); // call the callback
}
}
uso del método:
sample2.callcb(new CallBack<Void,String>(){
@Override
public Void call(String val) {
// TODO Auto-generated method stub
return null;
}
});
dos argumentos muestra: CallBack2.java
public abstract class CallBack2<TRet,TArg1,TArg2> {
public abstract TRet call(TArg1 val1,TArg2 val2);
}
nótese que cuando utiliza el tipo de devolución de nulo, debe utilizar return null; así que aquí hay una variación para corregirlo porque normalmente las devoluciones de llamada no devuelven ningún valor.
vacío como tipo de retorno: SimpleCallBack.java
public abstract class SimpleCallBack<TArg> {
public abstract void call(TArg val);
}
void como tipo de retorno 2 args: SimpleCallBack2.java
public abstract class SimpleCallBack<TArg1,TArg2> {
public abstract void call(TArg1 val1,TArg2 val2);
}
interfaz no es útil para esto.
Las interfaces
permiten que varios tipos coincidan con el mismo tipo. teniendo un conjunto de funciones predefinido compartido.
Las clases abstractas permiten que las funciones vacías dentro de ellas se completen más tarde. en la extensión o instanciación.
No, pero ver cosas como http://www.programmingforums.org/thread27905.html. –