Есть ли способ узнать, расширяет ли поле java.awt.Component? - PullRequest
0 голосов
/ 28 марта 2012

Я использую refect, чтобы получить объявленные поля класса.Теперь мне нужно выбрать только те, которые являются компонентами пользовательского интерфейса, например, JLabel, JFrame и т. Д. Есть ли способ определить, распространяется ли конкретный тип на java.awt.Compoenent?

Мне удалосьполучить общий тип поля, однако мне нужно определить, расширяет ли поле компонент

Ответы [ 5 ]

6 голосов
/ 28 марта 2012

Вы можете использовать Class # isAssignableFrom .

3 голосов
/ 28 марта 2012

Я написал пример того, как это сделать.Найдите ниже исследуемый класс:

import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.JWindow;

public class Foo {
   int i;
   long j;
   String s;
   JTable table;
   JLabel label;
   JWindow window;
 }

А вот код, который проверяет поля этого класса:

import java.lang.reflect.Field;

public class Test {
   public static void main(String[] args) {
      new Test().run();
}

private void run() {
   Class<?> c = Foo.class;
   System.out.println("The following fields extend Component: ");
   for (Field f : c.getDeclaredFields()) {
      Class<?> fieldClass = f.getType();
      Class<java.awt.Component> compClass = java.awt.Component.class;      
      if (compClass.isAssignableFrom(fieldClass)) {
         System.out.println(f.getName());
      }
   }
 }
}

Вывод:

The following fields extend Component: 
table
label
window
3 голосов
/ 28 марта 2012

Это должно сделать:

<Object instance>.getClass().isAssignableFrom(Component.class);
2 голосов
/ 28 марта 2012

yourField instanceof java.awt.Component

1 голос
/ 28 марта 2012

Вы можете использовать Class.isAssignableFrom () , если вы уже используете отражение

...