2016-12-05 2 views
0

Это класс испытаний.Как я могу объявить классы в методе?

package com.reflection; 

import com.reflection.test.A 

public class Main { 
    public void setA() { 
    A a = new A(); 
    } 
} 

Затем я использовал ClassLoader для доступа и управления классов, полей, методов и конструкторов как код ниже

Class cls = cl.loadClass("com.reflection.Main"); 

На самом деле я действительно хочу, чтобы получить A класс с помощью cls и уже пытался используйте getDeclaredClasses и getClasses, но результат был ничем.

+0

@ Поле Джобин должно быть объявлено из 'setA' хотя? A a; public void setA() {a = new A(); } как это. – kimkevin

ответ

2

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

Проще всего сделать, возможно, сделать javap -v где-то в процессе сборки, проанализировать вывод для квалифицированных имен классов и хранить их в файле свойств где-нибудь.

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

+0

Большое спасибо за ваш замечательный ответ. Я действительно с нетерпением жду решения, но я не могу найти подсказки. – kimkevin

+0

Я очень благодарен за помощь! – kimkevin

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