Tôi đã đấu tranh với vấn đề sau. Tôi có một loạt các đối tượng hàm, mỗi đối tượng có các kiểu đầu vào và đầu ra riêng được xác định thông qua các đối số kiểu chung trong java. Tôi muốn sắp xếp chúng trong một chuỗi sao cho dữ liệu thô được nhập vào hàm đầu tiên, được chuyển thành kiểu đầu ra, là kiểu đầu vào của đối tượng tiếp theo, v.v. tất nhiên điều này sẽ là tầm thường đối với mã cứng, nhưng tôi muốn có mã được cắm vào các đối tượng hàm mới. nếu tôi chỉ bỏ qua đối số kiểu (chỉ loại đầu ra cuối cùng), đây là cách điều trông:Java Generics: kết hợp cùng nhau đối tượng hàm chung
public T process() {
Iterator<Context> it = source.provideData();
for(Pipe pipe : pipeline) {
it = pipe.processIterator(it);
}
return sink.next(it);
}
đây một iterator trên các dữ liệu được truyền giữa các đối tượng chức năng, và bối cảnh nên bối cảnh. có cách nào để giữ loại ống cắm sau đây và vẫn duy trì an toàn loại?
chỉnh sửa: để rõ ràng, tôi có một loạt các đối tượng hàm, đường ống. mỗi loại đầu vào là một kiểu cụ thể và xuất ra một kiểu khác. (thực ra là một vòng lặp trên các kiểu này) chúng sẽ được xích lại với nhau, ví dụ: Pipe<A,B> -> Pipe<B,C> -> Pipe<C,D> -> ...
, sao cho đầu ra của một đường ống là kiểu đầu vào cho đường ống tiếp theo. Ngoài ra còn có một nguồn ở đây mà kết quả đầu ra một vòng lặp của loại A, và một bồn rửa mà sẽ chấp nhận loại (đầu ra của ống quá khứ). điều này làm cho mọi thứ rõ ràng hơn? Câu hỏi đặt ra là, vì có sự phụ thuộc quan trọng vào tính tương thích của các kiểu đầu vào và đầu ra, có cách nào để đảm bảo điều này không?
Tôi bắt đầu nghĩ rằng khi chèn các đối tượng hàm vào đường ống có thể là thời gian tốt nhất để đảm bảo an toàn loại, nhưng tôi không chắc chắn cách thực hiện điều này.
chỉnh sửa 2: tôi có một phương pháp cộng cho các đối tượng chức năng hiện trông giống như dưới đây:
public void addPipe(Pipe<?,?> pipe) {
pipeline.add(pipe);
}
tôi muốn kiểm tra xem thông số Loại thứ nhất là giống như "kết thúc" của đường ống hiện tại, và ném một ngoại lệ nếu không? tôi không nghĩ rằng có một cách tốt để có được thời gian an toàn biên dịch ở đây. "cuối" của đường ống hiện tại có thể được đặt thành tham số loại thứ hai của đường ống đầu vào. Tôi không thể nghĩ làm thế nào để làm điều này với Generics, và đi qua các thông tin lớp học có vẻ khá ghê gớm.
Loại tẩy xoá có thể làm cho cuộc sống của bạn khó khăn hơn cho các chức năng hoàn toàn chung. Trình biên dịch byte JVM loại bỏ kiểu từ cá thể của các lớp chung, do đó Danh sách trở thành Danh sách
Bạn có thể giải thích yêu cầu này ít hơn không? Không thể tìm ra những gì bạn có và những gì bạn muốn có. –
do đó, cách tiếp cận tốt nhất là để cố gắng đảm bảo an toàn loại khi chèn đối tượng hàm ống (how ??) và chỉ ngăn chặn cảnh báo về phương pháp trên? – downer