Tôi nhận được lỗi ClassCastException
khi tôi chạy điều này vì diễn viên ngầm ẩn d thành gấp đôi khi tôi chạy mã. Tuy nhiên, nếu tôi thay đổi tham chiếu đến d thành Object[]
thì nó không thể là tham số cho hàm được đặt. Nếu tôi thay đổi chức năng thiết lập để chấp nhận một Object[]
thì mọi thứ hoạt động tốt, nhưng sau đó lớp sẽ thất bại trong thời gian chạy nếu có bất kỳ cuộc gọi nào được đặt trên một đối tượng không thuộc loại N
.Trả lại một mảng từ một lớp chung
Tôi cần một giải pháp có thể get()
mảng cũ (hoặc bản sao của chúng) và có thể set()
dữ liệu vào một mảng mới.
public class Foo<N> {
public static void main(String[] args) {
Foo<Double> foo = new Foo<Double>();
Double[] d = foo.get();
// do stuff to d ...
foo.set(d);
}
N[] data;
public Foo() {
data = (N[]) new Object[2];
}
public N[] get() {
return (N[]) data;
}
public void set(N[] data) {
this.data = data;
}
}
Bản sao có thể có của [Cách tạo một mảng chung trong Java?] (Http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java) – Julien
Nó không phải là một trùng lặp với q đó. – avisnacks
bạn có thể sử dụng http: // stackoverflow này.com/a/3403976/2513573 để trích xuất loại và Array.newInstance để tạo mảng – AdamSkywalker