Укажите тип для ArrayList

В Java и Android я использую ArrayList<String> для списка поставок, поскольку я считаю их более удобными, чем стандартные String[]. Мои реальные вопросы, однако, следующие:

Какая часть <String> вызываемого ArrayList<String>?
Как я могу создавать классы и использовать <> [модификатор]? (Я не знаю, что он на самом деле назвал, так что теперь это модификатор).

Спасибо!

Ответ 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...

Кроме того, если вы не передаете параметр типа, я уверен, что ваш код все еще будет компилироваться. Но это не сработает.