2010-07-29 4 views
2

У меня есть класс, и я хочу определить, какие классы на самом деле ссылаются на класс. Есть ли простой способ определить, какие классы используются напрямую?Определение классов, которые используются в классе

В идеале я должен быть в состоянии знать это до того, как класс скомпилирован, но также важно знать это после того, как класс был скомпилирован.

У меня есть система времени выполнения, в которой пользователь может предоставить «последовательности», которые будут выполнены. Эти последовательности будут исполняться на Java. Однако мы хотим предупредить пользователя, если он использует Java-классы, которые не включены в предварительно одобренный API.

ответ

0

Лучший способ сделать это во время выполнения - использовать аспекты. Вы можете настроить свой аспект, чтобы советовать на основе пакетов, классов, вплоть до подписи метода. Ваш аспект может узнать о заранее одобренных пакетах/классах/методах и дать рекомендации на основе этого.

2

Если у вас есть .class-файл, используйте библиотеку синтаксического анализа байт-кода, такую ​​как BCEL, чтобы загрузить файл .class, а затем посмотрите в пуле констант, чтобы увидеть, на какие классы ссылаются (либо как литералы классов, либо с помощью методов/полей другие классы).

3

есть малоизвестный инструмент в Java SDK под названием javap, который вы можете запустить против любого файла класса и даст вам подпись класса:

считают этот класс:

public class Test{ 
    private String name; 
    private int someValue; 
    private ClassLoader classLoader; 
} 

Запуск javap на этом уроке:

# javap -private Test 

Compiled from "Test.java" 
public class Test extends java.lang.Object{ 
    private java.lang.String name; 
    private int someValue; 
    private java.lang.ClassLoader classLoader; 
    public Test(); 
} 

Там вы можете увидеть все используемые классы. Dont забыть «Собственный» -Option или вы будете видеть только публичные, защищенные и по умолчанию видимых полей/методы

Надежды, которая помогла

+0

+1 javap скалы, очень полезный инструмента – helpermethod

Смежные вопросы