У меня есть два класса, которые используют общие типы (A, B). Мой вопрос: как лучше всего работать с первым универсальным типом (TA) изнутри B? Вот упрощенный пример:
public class A<TListItemsType>
{
List<TListItemsType> list = new LinkedList<TListItemsType>();
public List<TListItemsType> getList()
{
return list;
}
}
public class B<TContainderType extends A>
{
TContainderType temp = null;
public B(TContainderType cont)
{
temp=cont;
}
public void DoWork()
{
for (TListItemsType item : temp.getList())
{
System.out.println(item);
}
}
}
Я пробовал решение, предложенное здесь -
public class B<TContainderType extends A<TListItemsType>>
{
TContainderType temp = null;
public B(TContainderType cont)
{
temp=cont;
}
public void DoWork()
{
for (TListItemsType item : temp.getList())
{
System.out.println(item);
}
}
}
И это работает до тех пор, пока используется предопределенный тип, такой как Integer или String, к сожалению, это не работает, поскольку компилятор не распознает универсальное имя класса.
Поэтому пошел дальше и попытался настроить другой общий тип, а затем использовать его внутри расширений:
public class B<TListItemsType, TContainderType extends A<TListItemsType>>
{
TContainderType temp = null;
public B(TContainderType cont)
{
temp=cont;
}
public void DoWork()
{
for (TListItemsType item : temp.getList())
{
System.out.println(item);
}
}
}
И это действительно работает, но пахнет не так. Есть ли другой способ использовать универсальный тип, используемый в другом универсальном типе?