Mam klasę podstawową, która ma abstrakcyjną metodę getType(). Chcę, aby podklasy były w stanie zaimplementować tę metodę i zapewnić rzeczywistą klasę do użycia.Zwróć zagnieżdżony typ klasy w języku Java
W kodzie, coś jak następuje:
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
}
}
Problem polega na tym, że mam „MyTile nie może zostać rozwiązany” w wierszu oznaczonym. Więc staram się powrócić zamiast tego.
zwrotny nowy MyTile() getClass()
ale teraz Eclipse mówi mi:
niezgodność typów: nie można przekonwertować z Przechwytywanie klasy
<
# 1-of? rozciąga B.MyTile>
do klasy<
A.Tile>
który nawet nie jestem pewien, czy nie może to błąd w Eclipse tutaj top (capture # 1?).
Następnie rezygnuję z interfejsów i próbuję użyć abstrakcyjnej podstawowej klasy Tile. Z pomocą Eclipse, I skończyć z następującego kodu, który wydaje się skompilować:
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"
}
}
Więc w zasadzie wydaje się mieć trzy pytania:
1) jest to możliwe, aby uzyskać to do pracy z .Tile będącym interfejsem?
2) Czy podczas korzystania z klasy bazowej numer Class<? extends X>
jest prawidłowy?
3) A w jaki sposób mogę zwrócić moje zagnieżdżone odniesienie do klasy B.MyTile z metody? Zrobić new MyTile().getClass()
nie może być w porządku, prawda?
Prawdopodobnie zwracanie "klasy" zamiast nieodblaskowego obiektu jest złym pomysłem. –
@ Tom Zwracanie klasy w kontekście sprawdzanych typów jest bardzo powszechnym wzorcem, który umożliwia sprawdzanie typu * sprawdzonego *, na przykład kolekcji w czasie wykonywania. Nie znam innego sposobu, w rzeczywistości ... –
Varkhan