如何在某个类中获取所有对象类。
例如:
class ex{
Scanner in=new Scanner(System.in);
void test(){
String out=in.nextLine();
JOptionPane.showMessageDialog(null,out);
}
}
class ex2{
void test(){
java.io.BufferedReader in = new java.io.BufferedReader(new java.io.InputStreamReader(System.in));
String output=in.readLine();
}
}
从这个班级我想打印出来
class ex :
java.util.Scanner
java.lang.String
javax.swing.JOptionPane
class ex2 :
java.io.BufferedReader
java.io.InputStreamReader
java.lang.String
答案 0 :(得分:1)
一种可能的方法是从您自己的类中读取您自己的java类文件源,并列出您的java类中使用的所有类
答案 1 :(得分:1)
不可能,因为您尝试在实例的类中打印所有导入类的名称。考虑一些已导入到类文件的类,但该类的使用(导入的类)将在限制范围内。(private
: private修饰符指定只能访问该成员它自己的类。)除非你像阅读文本文件一样读取类文件并获取导入的类文件名。(这可能不是一个实际的解决方案)
如果您想要层次结构,可以执行以下操作。
JOptionPane.showMessageDialog(null,out.getClass());
public static String printx(Object obj, String output){
String str2 = new String(obj.getClass().toString());
if(!str2.equalsIgnoreCase("class java.lang.Object") && !str2.equalsIgnoreCase("class java.lang.Class")){
output += printx(obj.getClass().getSuperclass(),output);
}
output += (","+str2);
return output;
}
public static void main(String[]args){
Scanner c = new Scanner(System.in);
String elzz = printx(c,"");
elzz = elzz.substring(1);
System.out.println(elzz);
}
答案 2 :(得分:1)
您可以使用ASM库来读取类文件。文档是here。你也可以谷歌一些例子。基本上你需要读取类常量池的Class条目。