Не удается преобразовать из java.lang.Class <T>в java.lang.Class <T> - PullRequest
1 голос
/ 24 ноября 2011

У меня эта проблема.Разве конструктор не должен иметь те же параметры типа, что и класс?

public class MyBuilder<T> {

private final Class<T> clss;

/**
 *
 * @param clss
 */
public <T> MyBuilder(final Class<T> clss) {
    this.clss = (Class<T>) clss; // compiler error here
}


Type mismatch: cannot convert from java.lang.Class<T> to java.lang.Class<T>

Если я удаляю <T> для ctor, который он компилирует, но я не могу сделать:

MyBuilder<Foo> myBuilder = new MyBuilder<Foo>();   // compiler error here

Ошибка: конструктор MyBuilder<Foo>() не определен.

Ответы [ 2 ]

8 голосов
/ 24 ноября 2011

Удалите параметр типа из конструктора, а также приведение:

public MyBuilder(final Class<T> clss) {
   this.clss = clss;
}

Параметры типа класса, в данном случае T, неявно объявляются для любых членов экземпляра, включая конструкторы. Явно объявив T для конструктора, вы фактически замаскировали T, объявленный классом, что привело к этой запутанной ошибке.

5 голосов
/ 24 ноября 2011

Потому что это «Т» не то «Т». T - просто "заполнитель" для некоторого типа. Т в

private final Class<T> clss;

не имеет отношения к T в параметре конструктора.

...