Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
1

Одинаковый дженерик у класса и у переменной. Вложенные дженерики. Транзитивность дженериков

08.10.2019, 13:25. Просмотров 629. Ответов 6


Всем привет.
В общем, я использую Retrifit2 и хочу написать нечто такое:
И похоже я слегка запутался с дженериками
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// метод в интерфейсе
public Single<Class1<MyType>> getSomthingFromServer(тут какие то аргументы);
 
// модели данных
class Class1<T>
{
    Type1<T> type1;
}
 
class Class2<T>
{
    T t;
}
 
class MyType { ... }
И итоге все хорошо, кроме того, что у меня не создается инстанс класса MyType внутри класса Class2, если так можно выразится )
То есть, он мне создает экземпляры : class1, class2, а myType == null // true
Я так понял, что он не может сделать new T(); // мои догадки

Собственно вопрос, правильно я понимаю, что между дженериками Class<T> и Type1<T> нет никакой связи, и <T> никак не пробрасывается внутрь классов, и что это разные дженерики. Или они одинаковые, но просто нельзя сделать new от типа T?
Или я окончательно запутался и лыжи уже не едут
Пожалуйста, объясните, где я ошибаюсь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.10.2019, 13:25
Ответы с готовыми решениями:

Вложенные свойства класса
Думаю на этот вопрос быстро дадут ответ. Как создать свой класс с вложенными свойствами? Что-то...

Collections и дженерик
Суть вопроса, есть коллекция любая к слову LinkedList&lt;&gt;. При объявлении мне не надо указывать...

Что такое дженерик?
Объясните что такое дженерик, а то уже тонну информации прочиатл и не могу понять... К примеру...

Имплементация дженерик интерфейса
Добрый день. Не могу до конца осознать следующий код, может кто на пальцах объяснить? Есть...

6
3053 / 1458 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
08.10.2019, 14:06 2
Цитата Сообщение от teapotpro Посмотреть сообщение
нельзя сделать new от типа T?
Нельзя. По спецификации.
1
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
08.10.2019, 19:32  [ТС] 3
В таком варианте тип T будет "пробрасываться внутрь", ну, это компилятор будет считать одним типом ?
Или до класса Class2 дело уже не дойдет ? До переменной, которая лежит внутри Class2
Java
1
2
3
4
5
6
7
8
9
10
11
class Class1<T>
{
    private Class2<T> class2;
}
 
class Class2<T>
{
    T t;
}
 
Class1<SomeType> class1 = new Class1<>();
0
3053 / 1458 / 492
Регистрация: 29.11.2010
Сообщений: 2,888
08.10.2019, 19:39 4
Переменная class1.class2 для компилятора будет считаться Class2<SomeType>, если это то, что вы имеете в виду. А переменная class1.class2.t будет считиаться типа SomeType.
0
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
08.10.2019, 19:56  [ТС] 5
Цитата Сообщение от lemegeton Посмотреть сообщение
Переменная class1.class2 для компилятора будет считаться Class2<SomeType>, если это то, что вы имеете в виду. А переменная class1.class2.t будет считиаться типа SomeType.
Я попытался сделать так:
Java
1
2
Class1<SomeType> class1 = new Class1<SomeType>();
boolean result = class1.class2.t instanceof SomeType; // И получаю тут false
Объект класса Class2 создаю внутри конструктора Class1

ничего не могу понять, почему компилятор считает их разными типами
0
324 / 251 / 106
Регистрация: 14.06.2016
Сообщений: 511
08.10.2019, 21:18 6
Так поле t на какой инстанс ссылается? Или null?
0
0 / 0 / 0
Регистрация: 30.08.2017
Сообщений: 12
09.10.2019, 09:27  [ТС] 7
Цитата Сообщение от vcrop Посмотреть сообщение
Так поле t на какой инстанс ссылается? Или null?
Да, я создал инстанс SomeType и привет его к типу T и все заработало.
Спасибо )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.10.2019, 09:27

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Получить доступ к переменной класса при наличии такого же имени переменной в функции
Например, есть приватная переменная clientName в классе. Также есть точно такая же переменная в...

Создание экземпляра класса-наследника для переменной с типом базового класса
Подскажите чайнику как создается экземпляр класса BC BaseClass BC = new DerivedClass(); ...

Передача значения переменной из метода одного класса в метод другого класса
Добрый вечер! Есть основная форма Form1 в которой есть метод private void button1_Click(object...

Ввод вывод переменной класса, являющейся членом другого класса
Приветствую! У меня есть 2 класса: подкласс filling: class filling { private: int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.