Is there an interface similar to Callable but with arguments?

后端 未结 8 1582
小蘑菇
小蘑菇 2021-01-31 02:03

Is there an interface in Java similar to the Callable interface, that can accept an argument to its call method?

Like so:

public interface M         


        
相关标签:
8条回答
  • 2021-01-31 02:26

    Normally arguments are not required as the method can have any number of arguments in its constructor.

    final int i = 5;
    final String word = "hello";
    
    Future<String> future = service.submit(new Callable<String>() {
        public String call() {
            return word + i;
        }
    });
    

    In this example i and word have been used, but you can "pass" any number of parameters.

    0 讨论(0)
  • 2021-01-31 02:30

    at first it thought that this is done with an interface but then i found that it should be done using an abstract class.

    i have solved it this way:


    edit: lately i just use this:

        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);
    }
    

    define method:

    class Sample2 
    {
        CallBack<Void,String> cb;
        void callcb(CallBack<Void,String> CB)
        {
         cb=CB; //save the callback
         cb.call("yes!"); // call the callback
        }
    }
    

    use method:

    sample2.callcb(new CallBack<Void,String>(){
            @Override
            public Void call(String val) {
                // TODO Auto-generated method stub
                return null;
            }
        });
    

    two arguments sample: CallBack2.java

    public abstract class CallBack2<TRet,TArg1,TArg2> {
        public abstract TRet call(TArg1 val1,TArg2 val2);
    }
    

    notice that when you use Void return type you have to use return null; so here is a variation to fix that because usually callbacks do not return any value.

    void as return type: SimpleCallBack.java

    public abstract class SimpleCallBack<TArg> {
        public abstract void call(TArg val);
    }
    

    void as return type 2 args: SimpleCallBack2.java

    public abstract class SimpleCallBack<TArg1,TArg2> {
        public abstract void call(TArg1 val1,TArg2 val2);
    }
    

    interface is not useful for this.

    interfaces allow multiple types match same type. by having a shared predefined set of functions.

    abstract classes allow empty functions inside them to be completed later. at extending or instantiation.

    0 讨论(0)
提交回复
热议问题