Ява: подклассификация genericised класса

У меня есть genericised класс, который я хочу подклассифицировать следующим образом:

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>)
    }
}

... где genericised суперкласс:

public class BaseTable<T extends BaseTableEntry>
{

    public BaseTable(int rows, int cols, Class<T> clasz)
    {
        ...
    }
...
}

Я понимаю ошибку компилятора, но, может казаться, не нахожу работу, кроме включать дополнительный параметр в SomeTable конструктор.

Какие-либо предложения?

Спасибо!

9
задан bguiz 25 January 2010 в 03:53
поделиться

2 ответа

Это компилирует:

public class SomeTable extends BaseTable<SomeTableEntry> {
    public SomeTable(int rows, int cols)
    {
        super(rows, cols, SomeTableEntry.class);
    }
}

Это работает с актером:

public class SomeTable<T extends BaseTableEntry> extends BaseTable<T> {
    public SomeTable(int rows, int cols)
    {
        super(rows, cols, (Class<T>)SomeTableEntry.class);
    }
}

, но я с нетерпением жду кого-то размещения объяснения, почему компилятор требует отличия для класса.

10
ответ дан 4 December 2019 в 14:28
поделиться

Можно определить более некоторое время конструктора , если вы пройдете класс к нему так же, как вы делаете с базовым классом:

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);
    }
}
4
ответ дан 4 December 2019 в 14:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: