У меня есть следующий вопрос: мне нужно написать один метод, который будет принимать переменное количество аргументов Function и, на его основе, вернет необходимый тип. Проблема заключается в том, что функции от аргументов выполняются в следующем порядке:Значение аргумента переменной (типа функции) и тип возвращаемого значения переменной
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);
}
}
Как Вы можете видеть, мне нужно создать класс, который будет иметь один метод (перегрузка не допускается) и на основе какой то метод получит, он должен вернуть правильный тип.
У меня есть начало класса 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?
}
[I] (http://stackoverflow.com/questions/33256485/) [чувствовать себя] (http://stackoverflow.com/questions/33298519/) [déjà vu] (http://stackoverflow.com/вопросы/33259637 /). Вы все в одном классе? Это назначение - вздор. – Holger
Невозможно использовать varargs, чтобы выразить, что последовательные типы должны совпадать. Вы можете сделать 'convertBy (Function , ?> ... funcs)', но тогда вы потеряете всю безопасность типов. Я согласен, что это очень странное задание. –
@Holger: Похоже, я не был первым в этом задании (1,2 из ваших хитов правильные) - его половина учебного года, другая, вероятно, получит это смешное задание завтра. Я знаю это, вы знаете, что почти все это знают. Кроме того, часть, где вы не можете перегружать методы, была добавлена как несколько дней назад, в начале ее не было. – uacnix