Проблемы с параметризацией

 
 
 
Сообщения:2
Здравствуйте.
Проблема заключается вот в чем:

Для примера, если написать такой код:

public class MyClass<T> {
  ...
  public MyClass() {
    T tmp = new T();
    ...
  }
  ...
}


Возникает ошибка при создании объекта tmp. Как можно решить подобную проблему?
Изменен:21 июн 2016 16:52
 
 
Сообщения:70
Создать экземпляр дженерик типа нельзя, т.к. компилятор не знает тип создаваемого объекта (при компиляции все параметры типа T заменяются на конкретный тип).

Как вариант для решения можно просто в параметре передать T:
public class A<T> {
	T obj;

	A(T obj) {
		this.obj = obj;
	}
}
Изменен:21 июн 2016 18:49
 
 
Сообщения:309
Почитайте про дженерики, информация о них стирается во время компиляции. Для вашкго случая следует передавать конструктор класса-параметра данному классу.
  public MyClass(Supplier<T> supplier) {
    T tmp = supplier.get();
    ...
  }


И при создании класса
new MyClass<Foo>(Foo::new)
Изменен:21 июн 2016 18:36
 
 
Сообщения:2
Спасибо за ответ.
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет