Задать вопрос
@thatmaniscool

Как правильно передать двойной параметр в обобщенны метод Java?

Прежде всего я создаю интерфейс с двумя параметрами.
public interface Generator <T, R> {
	public T next (R x);
}

После чего создаю демо-класс
public class DemoClass {
	private int id;
	public DemoClass (int id){
		this.id = id;
	}
}

Создаю класс, который реализует интерфейс и параметры.
public class GenericClass implements Generator <DemoClass, Integer>{
	public DemoClass next(Integer x) {
		return new DemoClass (x);
	}
}

Теперь я создаю класс с обобщенным методом и тут появляется проблема, а именно, я не могу передать два параметра одновременно. Как это сделать правильно?
import java.util.*;

public class MainClass {
	private static Random rand = new Random ();
	
	public static <T> T [] arr (T [] a, Class <?> typeToken){
		try{
			Generator <?, ?> gen = (Generator <?, ?>)typeToken.newInstance(); // Как передать два параметра.
			for (int i=0; i!=a.length; i++){
				a[i] = (T) gen.next(rand.nextInt(100)); // Эта строчка не работает.
			}
		} catch (Exception e){
			throw new RuntimeException (e);
		} return a;
	}
	
	public static void main (String [] args){
		@SuppressWarnings("unused")
		DemoClass [] myarr = arr (new DemoClass[10], GenericClass.class);
	}
}



























, как правильно задать параметры, передаваемые в обобщенный метод?
  • Вопрос задан
  • 308 просмотров
Подписаться 1 Оценить 1 комментарий
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Java-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Java-разработчик
    14 месяцев
    Далее
  • Хекслет
    Java-разработчик
    10 месяцев
    Далее
  • Stepik
    Буткемп "Java: написание веб-сервисов для начинающих"
    1 месяц
    Далее
  • Merion Academy
    Java-разработчик с нуля
    4 месяца
    Далее
  • Skypro
    Java-разработчик с нуля
    9 месяцев
    Далее
  • Нетология
    Java-разработчик с нуля
    12 месяцев
    Далее
  • ProductStar
    Java-разработчик
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
Потому что параметр не того типа, который ожидается:
(T) ((Generator<?, Integer>) gen).next(rand.nextInt(100)); // Эта строчка уже работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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