В Java и Android я использую ArrayList<String>
для списка поставок, поскольку я считаю их более удобными, чем стандартные String[]
. Мои реальные вопросы, однако, следующие:
Какая часть <String>
вызываемого ArrayList<String>
?
Как я могу создавать классы и использовать <>
[модификатор]? (Я не знаю, что он на самом деле назвал, так что теперь это модификатор).
Спасибо!
Укажите тип для ArrayList
Ответ 1
Здесь вы можете увидеть более четкое:
ArrayList<TypeOfYourClass>
Вы можете создать класс Person и передать его в ArrayList, как показывает этот фрагмент:
ArrayList<Person> listOfPersons = new ArrayList<Person>();
Ответ 2
Часть <String>
- это аргумент типа. Он предоставляет "значение" типов для параметра типа, который является E
in ArrayList<E>
... таким же образом, что если у вас есть метод:
public void foo(int x)
и вы вызываете его с помощью:
foo(5)
параметр x
, а аргумент - 5
. Параметры типа и аргументы типа - это общий эквивалент.
Подробнее см. раздел 4.5 JLS (и ссылки с него) для более подробной информации - и Часто задаваемые вопросы Java Generics для получения дополнительной информации о дженериках, которые вы, возможно, захотите прочитать:)
Ответ 3
Бит между <>
является аргументом типа, а функция называется Generics
Ответ 4
Предположим, вы хотите, чтобы ArrayList заполнялся только строками. Если вы пишете:
ArrayList<String> list = new ArrayList<String>();
list.add("A");
list.add("B");
list.add("C");
Вы можете быть уверены, что если кто-то попытается заполнить arrayList с int, он будет обнаружен во время выполнения.
Итак, generics используются в ситуациях, когда вы хотите применять такие ограничения.
Ответ 5
Посмотрите синтаксис generics для Java. Это установит вас прямо (ну, вроде, многие люди находят подход Java ниже С++ и С#).
Ответ 6
Это параметр типа. В Java вы должны предоставить один из них, когда класс написан как общий.
Ниже приведен пример определения общего класса
private class GNode<T>
{
private T data;
private GNode<T> next;
public GNode(T data)
{
this.data = data;
this.next = null;
}
}
Теперь вы можете создавать узлы любого типа, которые вы передаете. T действует как общий тип параметра для определения вашего класса. Если вы хотите создать node из целых чисел, просто выполните:
GNode<Integer> myNode = new GNode<Integer>();
Следует отметить, что ваш параметр типа должен быть объектом. Это работает через Java-бокс и авто-распаковывание. Это означает, что вы не можете использовать примитивные типы java, и вместо этого вы должны использовать соответствующие классы.
Boolean instead of bool
Integer instead of int
Double instead of double
etc...
Кроме того, если вы не передаете параметр типа, я уверен, что ваш код все еще будет компилироваться. Но это не сработает.