сначала подумал, что это делается с помощью интерфейса, но затем я обнаружил, что это должно быть сделано с использованием абстрактного класса.
я решил так:
изменения: в последнее время я просто использовать это:
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);
}
CallBack.Java
public abstract class CallBack<TRet,TArg> {
public abstract TRet call(TArg val);
}
определяют метод:
class Sample2
{
CallBack<Void,String> cb;
void callcb(CallBack<Void,String> CB)
{
cb=CB; //save the callback
cb.call("yes!"); // call the callback
}
}
метод использования:
sample2.callcb(new CallBack<Void,String>(){
@Override
public Void call(String val) {
// TODO Auto-generated method stub
return null;
}
});
два аргумента образца: CallBack2.java
public abstract class CallBack2<TRet,TArg1,TArg2> {
public abstract TRet call(TArg1 val1,TArg2 val2);
}
Обратите внимание, что при использовании типа возврата Void вам необходимо использовать return null; , так что здесь есть вариант исправить это, потому что обычно обратные вызовы не возвращают никакого значения.
недействительными в качестве возвращаемого типа: SimpleCallBack.java
public abstract class SimpleCallBack<TArg> {
public abstract void call(TArg val);
}
недействительными, как возвращение типа 2 арг: SimpleCallBack2.java
public abstract class SimpleCallBack<TArg1,TArg2> {
public abstract void call(TArg1 val1,TArg2 val2);
}
интерфейс не является полезным для этого.
интерфейсы позволяют использовать несколько типов одинакового типа. имея общий предопределенный набор функций.
абстрактные классы позволяют пустым функциям внутри них заполняться позже. при расширении или создании экземпляра.
Нет, но видеть вещи, как http://www.programmingforums.org/thread27905.html. –