Я собираю метаданные класса, используя JavaParser для хранения в JSON объекте. Для каждой единицы компиляции, которую я собираю, я также собираю список FieldDeclarations. Для каждого FieldDeclaration я хотел бы видеть, является ли тип интерфейсным типом.
В java do c я заметил, что FieldDeclaration наследует isClassOrInterfaceDeclaration()
от BodyDeclaration, однако мне хотелось бы что-то вроде isInterfaceDeclaration()
.
Однако я заметил, что класс ClassOrInterfaceDeclaration
имеет метод isInterface()
. Было бы безответственно взять FieldDeclaration f
и сделать что-то вроде:
Boolean b = f.toClassOrInterfaceDeclaration().isInterface()
В конечном счете, я хотел бы различить guish, имеет ли FieldDeclaration тип Class или Тип интерфейса.
Я также рассмотрел следующее:
Type t = f.getElementType() ;
// Dodgy code ahead
if(t == Class) { // do something...}
Если кто-то может указать мне в правильном направлении, любая помощь будет принята с благодарностью.
Редактировать: Некоторые предварительные испытания, которые я провел, дали неожиданные результаты. Я собрал список объявлений полей из класса, поля:
private String s;
private String addedState ;
// Component is an interface
private Component c ;
При выполнении isClassOrInterfaceDeclaration()
для каждого из этих полей каждое из них возвращало false. Но когда я выполнил:
f.forEach(n->System.out.println(n.getElementType().isClassOrInterfaceType())) ;
каждый вернул истину.
Мои предположения относительно ожидаемого результата оказались ложными.
Редактировать 2: Я пришел к выводу, почему вызов isClassOrInterfaceDeclaration () не дает true, потому что поля буквально не объявляют класс или интерфейс. Мне нужно найти способ определить, является ли тип классом или интерфейсом.