有人可以详细说明这一点,并解释两种方法之间的区别,以及何时/为什么你想要使用其中一种方法
Ian*_*oyd 20
| 方法 | 民众 | 非公开 | 遗传 |
|---|---|---|---|
getMethods() | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
getDeclaredMethods() | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c |
| 方法 | 获取方法() | 获取声明方法 |
|---|---|---|
| 民众 | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f |
| 受保护的 | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
| 私人的 | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
| 静态公共 | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f |
| 静电保护 | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
| 静态私有 | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
| 默认公开 | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f |
| 默认保护 | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
| 默认私有 | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
| 继承的公共 | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c |
| 继承保护 | \xe2\x9d\x8c | \xe2\x9d\x8c |
| 继承私有 | \xe2\x9d\x8c | \xe2\x9d\x8c |
| inherited static private | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c |
| inherited static protected | \xe2\x9d\x8c | \xe2\x9d\x8c |
| inherited static private | \xe2\x9d\x8c | \xe2\x9d\x8c |
| default inherited public | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c |
| default inherited protected | \xe2\x9d\x8c | \xe2\x9d\x8c |
| default inherited private | \xe2\x9d\x8c | \xe2\x9d\x8c |
If your goal, like mine, was to get public methods of a class:
\n| Method | Public | Non-public | Inherited |
|---|---|---|---|
getMethods() | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9c\x94\xef\xb8\x8f |
getDeclaredMethods() | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c |
| getPublicMethods() | \xe2\x9c\x94\xef\xb8\x8f | \xe2\x9d\x8c | \xe2\x9d\x8c |
and nothing else:
\n| Methods | getPublicMethods() |
|---|---|
| public | \xe2\x9c\x94\xef\xb8\x8f |
| protected | \xe2\x9d\x8c |
| private | \xe2\x9d\x8c |
| static public | \xe2\x9d\x8c |
| static protected | \xe2\x9d\x8c |
| static private | \xe2\x9d\x8c |
| default public | \xe2\x9d\x8c |
| default protected | \xe2\x9d\x8c |
| default private | \xe2\x9d\x8c |
| inherited public | \xe2\x9d\x8c |
| inherited protected | \xe2\x9d\x8c |
| inherited private | \xe2\x9d\x8c |
| inherited static private | \xe2\x9d\x8c |
| inherited static protected | \xe2\x9d\x8c |
| inherited static private | \xe2\x9d\x8c |
| default inherited public | \xe2\x9d\x8c |
| default inherited protected | \xe2\x9d\x8c |
| default inherited private | \xe2\x9d\x8c |
You have to do it yourself:
\nIterable<Method> getPublicMethods(Object o) {\n List<Method> publicMethods = new ArrayList<>();\n\n // getDeclaredMethods only includes methods in the class (good)\n // but also includes protected and private methods (bad)\n for (Method method : o.getClass().getDeclaredMethods()) {\n if (!Modifier.isPublic(method.getModifiers())) continue; //only **public** methods\n if (!Modifier.isStatic(method.getModifiers())) continue; //only public **methods**\n publicMethods.add(method);\n }\n return publicMethods;\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
13417 次 |
| 最近记录: |