-Xlint: не проверяется в netbeans - PullRequest
3 голосов
/ 27 января 2012

при очистке и сборке моего проекта в NetBeans появляется предупреждение «небезопасные операции», поэтому я использую -Xlint: не отмечен , чтобы увидеть эти операции, но я не могу понять, что я делаю неправильно. Это предупреждения, а затем мой код спасибо!

UploadBean.java:40: warning: [unchecked] unchecked conversion
    private final List fileList = Collections.synchronizedList(new ArrayList());
  required: List<T>
  found:    ArrayList
  where T is a type-variable:
    T extends Object declared in method <T>synchronizedList(List<T>)


UploadBean.java:40: warning: [unchecked] unchecked method invocation: method synchronizedList in class Collections is applied to given types
    private final List fileList = Collections.synchronizedList(new ArrayList());
  required: List<T>
  found: ArrayList
  where T is a type-variable:
    T extends Object declared in method <T>synchronizedList(List<T>)


UploadBean.java:97: warning: [unchecked] unchecked call to add(E) as a member of the raw type List
                    fileList.add(fd);
  where E is a type-variable:
    E extends Object declared in interface List
3 warnings

КОД

 //This is line 40    
 private final List fileList = Collections.synchronizedList(new ArrayList());

 //This is line 88
 public void doUpload(FileEntryEvent e) {
        FileEntry file = (FileEntry) e.getSource();
        FileEntryResults result = file.getResults();
        for (FileInfo fileInfo : result.getFiles()) {
            if (fileInfo.isSaved()) {
                FileDescription fd =
                        new FileDescription(
                        (FileInfo) fileInfo.clone(), getIdCounter());
                synchronized (fileList) {
                    fileList.add(fd); //This is line 97
                }
            }
        }
    }

ура

Ответы [ 2 ]

6 голосов
/ 27 января 2012

Вам необходимо узнать о Java Generics.Старый стиль 1.4 по-прежнему будет компилироваться, но он будет делать это с предупреждениями (некоторые считают ошибки).

Поскольку используемые вами классы ожидают параметры Generic Type, их необходимо указывать компилятору, например, так:

 //This is line 40    
 private final List<FileDescription> fileList = Collections.synchronizedList(new ArrayList<FileDescription>());

 //This is line 88
 public void doUpload(FileEntryEvent e) {
        FileEntry file = (FileEntry) e.getSource();
        FileEntryResults result = file.getResults();
        for (FileInfo fileInfo : result.getFiles()) {
            if (fileInfo.isSaved()) {
                FileDescription fd =
                        new FileDescription(
                        (FileInfo) fileInfo.clone(), getIdCounter());
                synchronized (fileList) {
                    fileList.add(fd); //This is line 97
                }
            }
        }
    }

Обратите внимание, что при использовании дженериков некоторые типы приведения больше не нужны.Например, fileList.get(0) вернет FileDescription в приведенном выше примере, без необходимости явного приведения.

Параметр generics указывает, что все, что хранится в fileList, должно быть «по крайней мере»"Описание файла.Компилятор проверяет, что невозможно поместить в список элементы, не относящиеся к FileDescription, и что выходной код фактически не выполняет никаких проверок во время выполнения.Таким образом, генерики на самом деле не страдают от ударов производительности, как аналогичные методы в других языках, однако «стирание типов», предварительно сформированное компилятором, делает невозможными определенные технические операции, такие как анализ типов во время выполнения для универсального параметра.

они вам понравятся.

Если этот код был написан до выпуска Generics, вы можете скомпилировать его с флагами обратной совместимости (-source 1.4 -target 1.4).

1 голос
/ 27 января 2012

Вы должны использовать тип в вашем списке, как:

List<Object> l = new ArrayList<Object>();

Или с оператором jdk7 и diamond вы можете использовать:

List<Object> l = new ArrayList<>();

Итак, в вашем коде используйте:

private final List <FileDescription> fileList = Collections.synchronizedList(new ArrayList<FileDescription>());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...