一尘不染

Class API中的getDeclaredConstructors和getConstructors有什么区别?

java

我注意到,在Java Reflection API中,有两种不同的调用构造函数的方法:getDeclaredConstructors/
getConstructors方法。尽管Java文档略有不同(getDeclaredConstructors似乎暗示它返回的是所有构造函数,而不是公共的构造函数),但不清楚为什么API显式支持这两种不同的方法。

更重要的是,我想知道:如果我们动态调用类,什么时候一种方法比另一种方法更可取?例如,访问私有构造函数的目的是什么?


阅读 808

收藏
2020-12-03

共1个答案

一尘不染

getDeclaredConstructors(当您需要
所有 构造函数时)

返回一个构造函数对象数组,该对象反映此Class对象表示的类声明的所有构造函数。这些是公共,受保护,默认(程序包)访问和私有构造函数。

getConstructors(当您
public想要构造函数时)

返回一个包含构造函数对象的数组,该对象反映此Class对象表示的类的所有公共构造函数。

所以,看的文档对他们俩的,我觉得不同的是,getConstructors只返回public构造函数,而getDeclaredConstructors返回的所有构造函数(publicprotected,默认(包)访问和private

因此,如果只需要public构造函数然后使用,这很容易getConstructors。否则,如果需要所有构造函数(不考虑构造函数的access-
modifier),请使用getDeclaredConstructors

2020-12-03