почему я должен импортировать InvocationTargetException, поскольку он находится в java.lang? - PullRequest
2 голосов
/ 12 октября 2019

Я пытаюсь перехватить InvocationTargetException в моем файле, но я получаю эту ошибку, если я не пишу явно оператор импорта для него.

Поскольку он находится в подпакете java.lang, я нене знаю, почему я должен импортировать его.

//this is the import statement that worked

import java.lang.reflect.InvocationTargetException;

Это сообщение об ошибке:

source\DatabaseDemo.java:38: error: cannot find symbol
        }catch (NoSuchMethodException | InstantiationException | SQLException | ClassNotFoundException | IllegalAccessException | InvocationTargetException e ){
                                                                                                                                  ^
  symbol:   class InvocationTargetException
  location: class DatabaseDemo

Ответы [ 2 ]

4 голосов
/ 12 октября 2019

В Java нет концепции подпакетов. Мы, люди, рассматриваем пакеты как иерархические для удобства и потому, что исходный код обычно структурирован в иерархию каталогов. Однако на уровне языка такой иерархии не существует. Другими словами, java.lang.reflect не является «подпакетом» java.lang. А так как только классы пакета java.lang импортируются автоматически, вам необходимо явно импортировать InvocationTargetException.

1 голос
/ 12 октября 2019

Чтобы добавить к чему @Slaw, в java нет неявного импорта подпакетов.

package a;
class A{}

и

package a.b;
   class B{}

Если вы хотите использовать B в A, вы должны импортировать егоявно как: import a.b.B; или import a.b.*;

Надеюсь, что это может помочь

...