从一个特定的 class 树向上到 Object 并获取它们的方法(它们不会被多次写入)
Going from a specific class up the tree to Object and getting their methods(without them being written more than once)
所以我有一个problem.My任务,直到明天要制作一个java程序,得到一个class,然后写下它的名称和方法,然后得到它实现,做同样的事情并继续直到 Object.The 问题是我必须做到这一点,这样方法就不会重复自己。(只有添加方法的 class 应该打印出来,实现class 不应该再有它了。)
我做到了,所以它只打印一次,但打印出来很奇怪。这是代码:
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
你可以获得 class 的所有 public 方法 - 甚至是它的 super-class.[=12 提供的 public 方法=]
我认为只有当 class 也提供了实现时你才想打印方法,所以你需要检查声明 class: 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("=============================");
}
}
}
检查此代码在 Ideone 上运行。
这对我有用:
m.getDeclaringClass().等于(cl)
所以我有一个problem.My任务,直到明天要制作一个java程序,得到一个class,然后写下它的名称和方法,然后得到它实现,做同样的事情并继续直到 Object.The 问题是我必须做到这一点,这样方法就不会重复自己。(只有添加方法的 class 应该打印出来,实现class 不应该再有它了。) 我做到了,所以它只打印一次,但打印出来很奇怪。这是代码:
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
你可以获得 class 的所有 public 方法 - 甚至是它的 super-class.[=12 提供的 public 方法=]
我认为只有当 class 也提供了实现时你才想打印方法,所以你需要检查声明 class: 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("=============================");
}
}
}
检查此代码在 Ideone 上运行。
这对我有用: m.getDeclaringClass().等于(cl)