В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Может быть интересно, что такое поведение может быть «решено». Используйте два интерфейса: базовый неуниверсальный интерфейс и универсальный интерфейс. Тогда компилятор знает, что все функции базового неуниверсального интерфейса не являются универсальными, и будет обрабатывать их следующим образом.
Это поведение очень раздражает, если использовать потоки и цепочку функций, и поэтому я решаю это следующим образом.
Использование через наследование интерфейса :
public interface GenericInterface<X extends Y> extends BaseInterface
{
X getValue();
}
public interface BaseInterface
{
String getStringValue();
}
Теперь вы можете выполнять следующие действия без предупреждения и без проблем:
GenericInterface object = ...;
String stringValue = object.getStringValue();
Когда вы не используете обобщенный компилятор, он обрабатывает его как необработанный тип, и, следовательно, каждый универсальный тип становится Object
, и поэтому вы не можете передать String[]
, так как ему нужно Object[]
. deal - если вы используете
List l = new ArrayList<String>();
Вы используете raw type, и все его элементы экземпляра заменяются его аналогами стирания. В частности каждый параметризованный тип, появляющийся в объявлении метода экземпляра, заменяется его необработанным аналогом. Подробнее см. JLS 4.8.