Java: sottoclasse una classe genericised
-
22-09-2019 - |
Domanda
Ho una classe genericised che desidero sottoclasse come segue:
public class SomeTable<T extends BaseTableEntry>
extends BaseTable<T>
{
public SomeTable(int rows, int cols)
{
super(rows, cols, SomeTableEntry.class);
//Does not compile:
//Cannot find symbol: constructor BaseTable(int, int, java.lang.Class<blah.blah.SomeTableEntry.class>)
}
}
... dove la superclasse genericised è:
public class BaseTable<T extends BaseTableEntry>
{
public BaseTable(int rows, int cols, Class<T> clasz)
{
...
}
...
}
ho capito l'errore del compilatore, ma non riesco a trovare una soluzione, oltre ad includere un parametro aggiuntivo nel costruttore SomeTable
.
Qualche suggerimento?
Grazie!
Soluzione
Questa compila:
public class SomeTable extends BaseTable<SomeTableEntry> {
public SomeTable(int rows, int cols)
{
super(rows, cols, SomeTableEntry.class);
}
}
Funziona con un cast:
public class SomeTable<T extends BaseTableEntry> extends BaseTable<T> {
public SomeTable(int rows, int cols)
{
super(rows, cols, (Class<T>)SomeTableEntry.class);
}
}
, ma non vedo l'ora a qualcuno distacco la spiegazione del motivo per cui il compilatore richiede il cast per la classe.
Altri suggerimenti
E 'possibile definire il costruttore SomeTable
genericamente se si passa Class
ad essa nello stesso modo come si fa con la classe di base:
public class BaseTable<T extends BaseTableEntry>
{
public BaseTable(int rows, int cols, Class<? extends T> clazz)
{
// ...
}
}
class SomeTable<T extends BaseTableEntry>
extends BaseTable<T>
{
public SomeTable(int rows, int cols, Class<? extends T> clazz)
{
super(rows, cols, clazz);
}
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow