Eclipse IDE предупреждения о типах Raw при использовании Generics - PullRequest
0 голосов
/ 30 января 2019

Я не вижу причин, по которым Eclipse создает желтые волнистые линии (предупреждение) под строкой кода, где Im создает новый ArrayList внутри метода m1 ().В любом случае, когда я не могу добавить объект не-String в Collection c, почему в среде IDE требуется <> рядом с новым ArrayList?Во время выполнения они также стираются, поэтому пытаются понять, действительно ли это что-то значит.

import java.util.ArrayList;
import java.util.Collection;

public class Main {

    public static void main(String[] args) {
        m1();
    }

    private static  Collection<String> m1() {
        Collection<String> c = new ArrayList();//gives typesafety warning for missing <>
        c.add("A");
        c.add("B");
        c.add(1); // does not let me add a non-String type anyways
        return c;
    }
}

1 Ответ

0 голосов
/ 30 января 2019

Предупреждение выдается за new ArrayList();, так как вы создаете ArrayList объект без шаблонов.Даже если вы предоставили универсальный для ссылочной переменной, есть случаи, когда вы можете добавить другие, чем объекты класса String.Как:

Вы создаете как: Collection<String> c = new ArrayList();.Поскольку ссылка имеет универсальный тип String, компилятор проверит только ссылку и не допустит ничего, кроме строки.Но в случае:

Collection<Integer> intColl = (Collection)c;

В этом случае вы даже можете добавить целое число в коллекцию.Вот почему он дает предупреждение.

...