0

次の質問があります。可変量の Function 引数を取り、それに基づいて必要な型を返す 1 つのメソッドを作成する必要があります。問題は、引数からの関数が順番に実行されることです。

public class Main {
    public static void main(String[] args) throws Exception {

    //Lambda expressions which will be taken as arguments in method.

    Function<String,List<String>> flines = e->{
    };
    Function<List<String>,String> join = e ->{
    };
    Function<String,List<Integer>> collectInts = e->{
    };
    Function<List<Integer>,Integer> sum = e->{
    };

    // end of lambdas

    String fname = System.getProperty("C:/LamComFile.txt"); 
    InputConverter<String> fileConv = new InputConverter<>(fname);
    List<String> lines = fileConv.convertBy(flines);
    String text = fileConv.convertBy(flines, join);
    List<Integer> ints = fileConv.convertBy(flines, join, collectInts);
    Integer sumints = fileConv.convertBy(flines, join, collectInts, sum);

    System.out.println(lines);
    System.out.println(text);
    System.out.println(ints);
    System.out.println(sumints);

    List<String> arglist = Arrays.asList(args);
    InputConverter<List<String>> slistConv = new InputConverter<>(arglist);  
    sumints = slistConv.convertBy(join, collectInts, sum);
    System.out.println(sumints);

    }
}

ご覧のとおり、1 つのメソッド (オーバーロードは許可されていません) を持つクラスを作成する必要があり、そのメソッドが受け取るものに基づいて、正しい型を返す必要があります。

私は InputConverter クラスの始まりを持っていますが、次の関数が前のものから引数を取得する方法がわかりません。

  public class InputConverter<T> {
      private T obj;

      public InputConverter(T obj) {
           this.obj = obj;
      }

      public <what goes here?> and_here convertBy(Function<In,Out>... funcs){

      }
  }

私はこのようなことができると思いますか?

if(funcs.length()==1){
    what? = funcs[0].apply(this.obj);
    return what?
}
4

1 に答える 1

4

Javaの型システムではそれを表現できません。他の何かの必要性を受け入れます。たとえば、次のように書くことができますf1.andThen(f2).andThen(f3).andThen(f4)...

于 2015-10-25T18:58:09.447 に答える