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



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

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

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

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

getConstructors(当您只希望 public 构造函数时)

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

所以,看看他们两个的文档,我认为不同之处在于getConstructors只返回public构造函数,而getDeclaredConstructors返回所有构造函数(public, protected,默认(包)访问和private)

因此,如果您只需要public构造函数,那么使用getConstructors就很容易了。否则,如果您需要所有构造函数(忽略构造函数的访问修饰符),则使用getDeclaredConstructors

getDeclaredXX()方法的存在是为了以这些类的创建者不一定想要的方式操作这些类。请注意,getDeclaredMethod()方法允许您调用私有方法,getDeclaredField()方法允许您获取/设置私有字段。

我不完全确定"合法的"用例,但这些用例显然对做某些事情很有用。而且,这类方法只返回在类中明确声明的内容,而不是由于父类而存在于类中的内容。

访问私有构造函数可能也是出于同样的原因,我想

我使用getDeclaredConstructors来创建一个类的工厂,其构造函数是私有的,以避免系统的"用户"可以直接创建这些类而不使用工厂。我发现这个方法很有用。

方法'getDeclaredConstructors'只返回在类中声明的构造函数。方法'getConstructors'也返回没有在类内部声明的构造函数,但继承自超类。

所以这取决于你要做什么。没有正确的方法,这实际上取决于你是否也需要超构造函数。

相关内容

  • 没有找到相关文章

最新更新