Я пытаюсь создать класс, который реализует коллекцию, поэтому он должен иметь метод, который удаляет Object
, поэтому я решил, что просто повторно использую метод, который я уже создал, чтобы удалить объект универсального типаT
, но выдает ошибку времени компиляции.Почему это не сработает?
Код
public class ArrayPP<T> implements Collection<T>
{
public boolean remove(Object o)
{
if (o instanceof T)
remove((T)o, true);
else
return false;
return true;
}
}
Ошибка
ArrayPP.java:5: unexpected type
found : T
required: class or array
if (o instanceof T)
Почему, Java?
Я решил это с помощью
if (t.getClass().isInstance(o))
remove((T)o, true);
else
return false;
return true;
Но ... Я имею в виду, если кто-то кодирует "ArrayPP<String> a = new ArrayPP<String>();
", вы знаете, что T
- это String
, верно?Так почему же во время выполнения не видно, является ли o
String
?Я имею в виду, что если бы я сделал a.add('c');
, он бы не скомпилировался, потому что он знает, что здесь метод add(T item)
в ArrayPP
будет принимать только String
s, так почему ... тьфу ....