Java 从树上的特定类到对象并获取它们的方法(无需多次编写)
所以我有一个问题。直到明天早上我的任务是做一个java程序,它得到一个类,然后写它的名称和方法,然后得到它实现的那个,做同样的事情,然后继续到对象。问题是我必须做它,这样方法就不会重复它们自己。(只有添加该方法的类才应该打印出来,该类的实现不应该再拥有它。) 我做的,所以它只打印一次,但它打印出来非常奇怪。下面是代码:Java 从树上的特定类到对象并获取它们的方法(无需多次编写),java,class,class-hierarchy,Java,Class,Class Hierarchy,所以我有一个问题。直到明天早上我的任务是做一个java程序,它得到一个类,然后写它的名称和方法,然后得到它实现的那个,做同样的事情,然后继续到对象。问题是我必须做它,这样方法就不会重复它们自己。(只有添加该方法的类才应该打印出来,该类的实现不应该再拥有它。) 我做的,所以它只打印一次,但它打印出来非常奇怪。下面是代码: public static void main(String[] args) { Object o = new JRadioButton(); Class cl;
public static void main(String[] args) {
Object o = new JRadioButton();
Class cl;
HashSet methodsnames = new HashSet();
for (cl = o.getClass(); cl != null; cl = cl.getSuperclass()) {
HashSet al = new HashSet();
System.out.println(cl.getName()+ " - ");
for (Method m : cl.getMethods()){
boolean added = methodsnames.add(m.getName());
if(added){
al.add(m.getName());}
}
al.forEach(System.out::println);
System.out.println("=============================");
}
}
使用Class#getMethods
可以获得该类的所有公共方法,甚至是它的超类提供的公共方法
我认为只有在类还提供了实现的情况下才需要打印该方法,因此需要检查声明类:m.getDeclaringClass().equals(cl)
使用class#getMethods
可以获得该类的所有公共方法,甚至是它的超类提供的公共方法
我认为只有在类还提供了实现的情况下才需要打印方法,因此需要检查声明类:
m.getDeclaringClass().equals(cl)
使用getDeclaredMethods
代替getMethods
:
import java.lang.*;
import java.lang.reflect.*;
import java.util.*;
import javax.swing.*;
public class main
{
public static void main(String ...args) {
Object o = new JRadioButton();
Class cl;
HashSet methodsnames = new HashSet();
for (cl = o.getClass(); cl != null; cl = cl.getSuperclass()) {
HashSet al = new HashSet();
System.out.println(cl.getName()+ " - ");
for (Method m : cl.getDeclaredMethods()){
boolean added = methodsnames.add(m.getName());
if(added){
al.add(m.getName());
}
}
al.forEach(System.out::println);
System.out.println("=============================");
}
}
}
检查此代码是否正在运行。使用
getDeclaredMethods
代替getMethods
:
import java.lang.*;
import java.lang.reflect.*;
import java.util.*;
import javax.swing.*;
public class main
{
public static void main(String ...args) {
Object o = new JRadioButton();
Class cl;
HashSet methodsnames = new HashSet();
for (cl = o.getClass(); cl != null; cl = cl.getSuperclass()) {
HashSet al = new HashSet();
System.out.println(cl.getName()+ " - ");
for (Method m : cl.getDeclaredMethods()){
boolean added = methodsnames.add(m.getName());
if(added){
al.add(m.getName());
}
}
al.forEach(System.out::println);
System.out.println("=============================");
}
}
}
检查正在运行的代码。这为我解决了问题:
m、 getDeclaringClass().equals(cl)这为我带来了窍门:
m、 getDeclaringClass().equals(cl)输出有什么问题?您的输出是什么样子的?它应该是什么样子的?不需要在循环中创建添加的所有内容都是在JRadioButton下打印出来的(这很有意义,因为所有的方法都表明它是一个实现)但是改为声明解决了我的问题!输出有什么问题?输出是什么样子的?它应该是什么样子的?没有必要在循环中创建添加的所有内容都是在JRadioButton下打印出来的(这很有意义,因为所有的方法都表明它是一个实现)但是换成一个医生解决了我的问题!