Java: разница между `Class.getDeclaringClass` и` Class.getEnclosingClass` [duplicate]

В моем случае: я сделал следующее (на mac):

  1. выполнил резервную копию «.bash_profile» и «.profile»
  2. очистил все андроид связанные с этим пути.
  3. создал новые пути, но на этот раз я перетащил соответствующие папки: {/.../sdk, /.../tools, /.../platform-tools} в терминал. Я сделал это для «.bash_profile» и «.profile».
  4. Затем после успешного сохранения файлов каждый. Я перезапустил терминал, чтобы быть уверенным в тех модификациях, которые я сделал.
  5. Затем я продолжил тестирование, если adb теперь отвечает ... путем ввода: (в терминале) устройств adb
  6. Мне все еще не повезло (мои устройства), где они не показывались, но я снова перезапустил adb.
  7. Я продолжал делать «adroid update adb». Это просто убило и перезапустило adb
  8. Я еще раз попробовал, пока устройства не показывались.
  9. Я полностью поддерживал свое устройство Android и возвращал весь телефон обратно на заводские настройки, перешел к активировать устройство для разработки и разрешить отладку usb в своих настройках> приложения.

******** РАБОТАЕТ КАК ШАРМ ********

Я снова попробовал команду «adb devices», и все было в порядке, когда устройство было видно.

Все самое лучшее. Просто не сдавайся. Мне потребовалось много проблем. Всем удачи.

20
задан OpenSauce 20 February 2012 в 13:03
поделиться

1 ответ

Найден здесь http://kickjava.com/1139.htm#ixzz1mv2nEWg7 :

"Сложность с getDeclaringClass заключается в том, что анонимные внутренние классы не считаются членами класс в Спецификации языка Java, тогда как именованные внутренние классы. Поэтому этот метод возвращает null для анонимного класса. Альтернативный метод getEnclosingClass работает как для анонимных, так и именованных классов. "

Например:

public class Test {
    public static void main(String[] args) {
        new Object() {
            public void test() {
                System.out.println(this.getClass().getDeclaringClass()); //null
                System.out.println(this.getClass().getEnclosingClass()); //not null
            }
        }.test();
    }
}

То же самое относится к неанонимным классам в области метода:

class Foo {
  Class<?> bar() throws NoSuchFieldException {
    class Bar<S> { }
    return Bar.class;
  }

  static void main(String[] args) throws NoSuchFieldException {
    System.out.println(new Foo<Void>().bar().getDeclaringClass()); // null
    System.out.println(new Foo<Void>().bar().getEnclosinglass()); // Foo
  }
}
28
ответ дан Rafael Winterhalter 19 August 2018 в 07:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: