Java [unchecked] предупреждение о незарегистрированном случае - PullRequest
3 голосов
/ 12 апреля 2011

Хорошо, я много раз искал и делал поиск в Google, но я все еще не могу найти способ избежать этого предупреждения.

Integer result = chooser.showOpenDialog(null);
if (result.equals(0))
{
    String tempHolder = chooser.getSelectedFile().getPath();
    filenameLoad = new File(tempHolder);
    filenameSave = filenameLoad;
    FileInputStream fis = null;
    ObjectInputStream in = null;
    try
    {
        fis = new FileInputStream(filenameLoad);
        in = new ObjectInputStream(fis);;
    }
    catch(IOException ex)
    {
        ex.printStackTrace();
    }

    try
    {
        loadFile = (ArrayList<Dot>)in.readObject();
    }
    catch(IOException ex)
    {
        System.out.println("Cast fail");
    }
    catch(ClassNotFoundException ex)
    {
        System.out.println("Cast fail");
    }
    catch (ClassCastException ex)
    {
        System.out.println("Cast fail");
    }

    try
    {
        in.close();
    }
    catch(Exception ex)
    {
        System.out.println("failed to close in");
    }
    save.setEnabled(true);
      gpanel.setDotList(loadFile);
  }

Выдает предупреждение в строке loadFile = (ArrayList) in.readObject ();Я добавил в уловах, поэтому я не уверен, почему он до сих пор говорит, что его не поймали.Любая помощь?спасибо

Ответы [ 5 ]

10 голосов
/ 12 апреля 2011

Это не "uncatched", но "unchecked". JVM не может сказать во время выполнения, то есть когда приведение завершено, содержит ли ArrayList действительно элементы Dot.

Это предупреждение появляется всякий раз, когда вы преобразуете из необработанного типа в универсальный тип. Если вы уверены, что приведение в порядке, вы можете подавить предупреждение с аннотацией

@SuppressWarnings("unchecked")

Для этого полезно инкапсулировать отливку небольшим отдельным методом.

2 голосов
/ 12 апреля 2011

Вы не проверяете, действительно ли объект, возвращаемый

in.readObject();

, действительно

ArrayList<Dot>

Использование

ArrayList<Dot> dotList = null;
Object obj = in.readObject();
if (obj instanceof ArrayList<Dot>)
{
dotList = (ArrayList<Dot>) obj;
}
1 голос
/ 12 апреля 2011

Это не говорит uncatched (что правильно написано uncaught), но unchecked.Вы не можете избежать этого предупреждения при приведении к универсальному типу, вы можете только подавить его.Или вы можете обойти это:

@SuppressWarnings("unchecked")
public static <T> T castToAnything(Object obj) {
  return (T) obj;
}

С помощью этого метода вы можете написать:

loadFile = castToAnything(in.readObject());
0 голосов
/ 12 апреля 2011

То, что вы видите, является предупреждением компилятора о том, что вы пытаетесь преобразовать Объект в ArrayList<Dot> без предварительной проверки, действительно ли Объект содержит Список точек, а не, например, Список Foo.

0 голосов
/ 12 апреля 2011

Это означает, что компилятор не может проверить, соответствует ли объект, который вы читаете, типу, к которому вы приводите. Таким образом, непроверенное предупреждение.

Кстати: вы можете поработать над обработкой ошибок, чтобы сделать ее более простой и понятной. ;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...