Надо вопросы чётче формулировать. Так как нифига не понятно, как у тебя устроены классы. Нет такого типа T, этой буквой обычно обозначают параметризированный тип.
Если надо просто узнать есть объект или нет, то никакой параметризации не требуется:
public class Foo {
static List<Object> list = new LinkedList<>();
public static boolean hasElem(Object elem) {
for (Object item : list) {
if (Objects.equals(item, elem)) {
return true;
}
}
return false;
}
public static void main(String[] args) {
list.add(1);
list.add("s1");
list.add(2);
list.add("s2");
list.add(3);
list.add("s3");
if (hasElem(3)) {
System.out.println("Has elem 3");
}
if (hasElem("s2")) {
System.out.println("Has elem \"s2\"");
}
if (hasElem('c')) {
System.out.println("Has elem 'c'");
}
}
}
Если же типом T ты параметризуешь свой класс/метод, то ничего проверять не надо: когда ты создашь экземпляр такого класса, параметризованный типом
String, то и список будет только из строк и поиск будет по строкам. Когда параметризуешь его
Integer, то везде будут числа.