Tôi có một giao diện chức năng mở rộng chức năng jdk chuẩn chỉ đơn giản là các loại chung. Bây giờ tôi muốn kết hợp hai chức năng sử dụng andThen được ném biên dịch lỗiGiao diện chức năng mở rộng Java 8 và kết hợp chúng
Error:(25, 25) java: method andThen in interface
java.util.function.Function<T,R>
cannot be applied to given types;
required:java.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>
found:ui.instrumentation.api.transformation.Transformer<T,R>
reason: cannot infer type-variable(s) V (argument mismatch;ui.instrumentation.api.transformation.Transformer<T,R>
cannot be converted tojava.util.function.Function<? super ui.instrumentation.api.messaging.Message<R>,? extends V>
)
Đây là đoạn mã mẫu:
public interface Transformer<T,R> extends Function<Message<T>, Message<R>> {
static <T, R> Transformer<T, R> combine2(Transformer<T, R> first, Transformer<T, R> second) {
return first.andThen(second));
}
}
Có cách nào để kết hợp các chức năng mở rộng giao diện chức năng tiêu chuẩn hoặc là có tốt hơn cách để làm điều này?
Tại sao chính xác bạn cần 'cái chức năng combine2', khi 'andThen' không theo nghĩa đen những điều tương tự, cho kiểu lập luận tổng quát hơn' Function'? – Mshnik
Vì vậy, bạn muốn có một hàm nhận 'Message', chuyển nó đến 'first', nhận được một' Message 'trở lại, sau đó bằng cách nào đó chuyển' Message 'sang' second' mặc dù 'second' cần một 'Thư 'không phải là 'Thư '. –
immibis
Đề xuất của tôi: không sử dụng các giao diện mở rộng như vậy. Bạn lưu một vài chữ cái để gõ vào các chi phí không cho phép sử dụng hiện tại của giao diện cơ sở (ở đây 'Chức năng'). Vì vậy, bạn cần phải thực hiện lại mọi thứ, không chỉ 'vàThen', ngay cả các chức năng tầm thường như' Function.identity() 'không thể được sử dụng làm' Biến áp'. Tìm hiểu bài học từ những sai lầm của người khác; mặc dù có chữ ký chức năng giống nhau, bạn không thể sử dụng 'Biến áp', trong đó yêu cầu 'UnaryOperator >' (ví dụ khác không cho phép kiểu cơ sở 'Hàm')… –
Holger