Tôi muốn tạo một lớp trong Java 8 để có thể đệ quy tạo một đối tượng có phương thức lấy tham số hàm dựa trên các tham số tôi đã thêm vào.Thu thập các đối số để áp dụng cho các chức năng được thu thập trong Java/Scala
Ví dụ, tôi muốn để có thể làm điều này:
new X().param(23).param("some String").param(someObject)
.apply((Integer a) -> (String b) -> (Object c) -> f(a,b,c))
Phương pháp áp dụng sau đó sẽ áp dụng các thông số thu thập được để chức năng nhất định.
Tôi cảm thấy điều này có thể xảy ra mà không cần phản ánh trong khi duy trì an toàn loại, nhưng tôi không thể tìm ra cách thực hiện. Một giải pháp trong Scala cũng được hoan nghênh, nếu tôi có thể dịch nó sang Java 8. Nếu không thể, tôi cũng sẽ chấp nhận một câu trả lời giải thích tại sao.
Những gì tôi có cho đến nay về cơ bản là thế này:
class ParamCmd<A,X> {
final A param;
public ParamCmd(A param) {
this.param = param;
}
public<B> ParamCmd<B, Function<A,X>> param(B b) {
return new ParamCmd<>(b);
}
public void apply(Function<A,X> f) {
// this part is unclear to me
}
public static void main(String[] args) {
new ParamCmd<Integer,String>(0).param("oops").param(new Object())
// the constructed function parameters are reversed relative to declaration
.apply((Object c) -> (String b) -> (Integer a) ->
"args were " + a + " " + b + " " + c
);
}
}
Như đã đề cập trong các ý kiến mã, vấn đề của tôi đang giữ các thông số chức năng theo thứ tự của các cuộc gọi của param(), và thực sự áp dụng các thông số .
Có vẻ như bạn cần áp dụng. – pedrofurla