Điều này có thể đã được hỏi một triệu lần trước, nhưng tôi đang gặp rắc rối khi gói đầu của tôi xung quanh viết một constructor sao chép vào một lớp trừu tượng với một tham số kiểu bounded. Tôi có một số mã mà trông như thế này:Java Copy constructors với generics
public abstract class Superclass<T> {
Set<? extends Variable<T>> vars;
public abstract Superclass<? extends T> copy();
class Variable<T> {
T value;
}
}
class Foo extends Superclass<Integer> {
public Foo copy() {
Foo _newFoo = Foo();
Set<FooVariable> _newVars = new HashSet<FooVariable>();
_newVars.addAll(this.vars);
_newFoo.vars = _newVars;
}
class FooVariable extends Variable<Integer> { /* ... */ }
}
class Bar extends Superclass<String> {
public Bar copy() {
Bar _newBar = Bar();
Set<BarVariable> _newVars = new HashSet<BarVariable>();
_newVars.addAll(this.vars);
_newBar.vars = _newVars;
}
class BarVariable extends Variable<String> { /* ... */ }
}
Kể từ khi phương pháp copy
cho cả Foo
và Bar
là như nhau, ngoại trừ cho các loại biến, tôi muốn để có thể di chuyển mã đó vào một phương pháp cụ thể trong siêu lớp. Nhưng tôi không thể tìm ra (a) làm thế nào để có bê tông public Superclass<? extends T> copy
phương pháp trở về một trường hợp Foo
nếu kêu gọi một Foo
và một trường hợp Bar
nếu kêu gọi một Bar
và (b) cư tập vars
với FooVariable
s hoặc BarVariable
s như thích hợp.
Ai có thể vui lòng giúp đỡ và cho tôi biết những gì tôi đang bỏ lỡ không? Cảm ơn.
Một hàm tạo bản sao là một hàm tạo thực tế chấp nhận một cá thể của lớp làm đối số. Đây là một phương pháp sao chép. –
wont này cung cấp cho biên dịch lỗi trên các 'Foo _newFoo = Foo();' và những gì về các loại trả về mất tích? Hoặc tôi hoàn toàn hiểu sai một số khái niệm – exexzian