Tôi đang sử dụng bản phát hành dịch vụ Eclipse Luna 2 (4.4.2), Java 8 u51.Hàm tạo hàm Java 8 từ đối tượng templated
Tôi đang cố gắng tạo phương thức sẽ tạo ra các cá thể của đối tượng được truyền dựa trên tham số phương thức khác. Nguyên mẫu được đơn giản hóa để
public <T> T test(Object param, T instance) {
Constructor<?> constructor = instance.getClass().getConstructors()[0]; // I actually choose a proper constructor
// eclipse reports "Unhandled exception type InvocationTargetException"
Function<Object, Object> createFun = constructor::newInstance;
T result = (T) createFun.apply(param);
return result;
}
On line với các báo cáo thực Function
khai Unhandled exception type InvocationTargetException
biên dịch lỗi. Tôi cần số Function
để sử dụng sau trong luồng.
Tôi đã cố gắng thêm các khối try/catch khác nhau, khai báo ném, nhưng không có lỗi nào sửa lỗi trình biên dịch này.
Làm cách nào để mã này hoạt động?
Bạn nghĩ gì là lợi thế của 'Function' đường vòng qua chỉ đơn giản gọi 'newInstance' mục' Constructor'? – Holger
@Holger Tôi đã sử dụng 'newInstance' trên' Constructor' trong luồng và nó tạo ra cùng một thông điệp, vì vậy tôi đã tạo một SSCE như thế này. Đường vòng hàm thực sự cần thiết để giữ một chuỗi 'stream()' tương đối có thể đọc được. – Dariusz
Tôi hiểu. Vì vậy, nó đã được một chút đơn giản hóa về trường hợp sử dụng và một biểu thức lambda như assylias đã đề nghị nên làm việc. Nhưng điều tôi muốn biết bây giờ là, liệu thực sự có một yêu cầu khắt khe về kiểu kết quả là kiểu chính xác của 'instance' (có thể là một phân lớp của' T') hay không, nói cách khác là dùng đến Reflection thực sự cần thiết ... – Holger