Tôi có một lớp cơ sở có phương thức getType() trừu tượng. Tôi muốn các lớp con có thể triển khai phương thức này và cung cấp lớp thực tế để sử dụng.Trả về loại lớp lồng nhau trong Java
Trong mã, giống như sau:
public abstract class A {
public static interface Tile;
protected abstract Class<Tile> getTileClass();
}
public class B extends A {
public static class MyTile implements A.Tile { }
@Override
protected abstract Class<A.Tile> getTileClass() {
MyTile t = new MyTile(); // WORKS
return MyTile; // ERROR HERE
}
}
Vấn đề ở đây là tôi nhận được "MyTile không thể giải quyết" trong dòng đánh dấu. Vì vậy, tôi đang cố gắng để trở lại này thay vì:.
trở MyTile mới() getClass()
nhưng bây giờ Eclipse nói với tôi:
Loại không phù hợp: không thể chuyển đổi từ Lớp
<
chụp # 1 trong số? mở rộng B.MyTile>
Class<
A.Tile>
mà tôi thậm chí không chắc chắn nếu có có thể là một lỗi trong Eclipse đây nhất (capture # 1?).
Tiếp theo, tôi sẽ từ bỏ các giao diện và cố gắng sử dụng lớp Gạch nền trừu tượng. Với sự giúp đỡ của Eclipse, tôi kết thúc với đoạn mã sau đó dường như biên dịch:
public abstract class A {
public static abstract class Tile;
protected abstract Class<? extends Tile> getTileClass();
}
public class B extends A {
public static class MyTile exends A.Tile { }
@Override
protected abstract Class<? extends A.Tile> getTileClass() {
return new MyTile().getClass(); // WORKS
return MyTile; // "Cannot be resolved"
}
}
Vì vậy, tôi về cơ bản dường như có ba câu hỏi:
1) Có thể được điều này để làm việc với A .Tile là một giao diện?
2) Khi sử dụng lớp cơ sở, là Class<? extends X>
thực sự là con đường chính xác?
3) Và làm cách nào tôi có thể trả về tham chiếu lớp B.MyTile lồng nhau của tôi từ bên trong phương thức? Phải làm new MyTile().getClass()
không thể đúng, phải không?
Có thể trả lại một 'Lớp' thay vì đối tượng không phản chiếu là một ý tưởng tồi. –
@Tom Trả về một lớp trong ngữ cảnh của các loại được chọn là một mẫu rất phổ biến, cho phép bạn kiểm tra kiểu * đã chọn *, ví dụ, một bộ sưu tập, tại thời gian chạy. Tôi biết không có cách nào khác, trên thực tế ... –
Varkhan