2015-06-17 48 views
5

Giả sử rằng tôi có một số class trong đó implementsjava.util.function.Function. Function cần biết về ngày bắt đầu và ngày kết thúc nhưng những thông tin này sẽ không đổi trong suốt thời gian tồn tại của hàm.Trạng thái trong một java.util.function.Function

Tôi đang xem xét triển khai Function với private final trường cho ngày bắt đầu và ngày kết thúc, vì phương pháp apply không yêu cầu giá trị mới cho chúng cho mỗi cuộc gọi. Tôi cảm thấy rằng điều này sẽ đơn giản hóa việc thực hiện của tôi nhưng lo lắng rằng điều này đi ngược lại toàn bộ mô hình lập trình chức năng.

Có hợp lý khi có các thành viên lớp không thay đổi trong một số Function khi các giá trị được yêu cầu theo phương pháp apply nhưng không đổi trong suốt thời gian tồn tại của Function?

+2

Có, không có gì sai với điều đó. –

Trả lời

3

Không có gì sai với cách tiếp cận của bạn.

Tôi cảm thấy điều này sẽ đơn giản hóa việc triển khai của tôi nhưng lo lắng rằng điều này đi ngược lại toàn bộ mô hình lập trình chức năng.

Để giải quyết vấn đề này, bạn có thể triển khai phương thức, ngày bắt đầu và ngày kết thúc của bạn và trả về cho bạn một hàm. Ví dụ:

public static final Function<Object, Object> getDateF(final Date start, final Date end) { 
    return input -> { 
    // do something with start/end for your calculation 
    final Object output = null; 
    return output; 
    }; 
} 

Thay thế đối tượng cho bất kỳ thứ gì bạn cần.

+2

Tôi muốn thêm rằng khi chạy, điều này sẽ đánh giá đối tượng thực hiện 'Hàm' sẽ có hai trường cho' start' và 'end', giống như trong đề xuất Roberts. Điều này chỉ ngắn hơn và đẹp hơn. – Lii

+0

Có 'Hàm' được thực hiện giống như một lớp, chẳng hạn như lớp được mô tả trong câu hỏi, làm cho nó hơi nguy hiểm khi sử dụng hàm, nó đã được khởi tạo và do đó lập trình viên không nhận ra nó có phụ thuộc vào các trường khác với những người được chuyển vào 'áp dụng', trừ khi họ đọc bản khởi tạo. Cách tiếp cận này xoay quanh vấn đề đó. –

Các vấn đề liên quan