Session 为什么JavaMail会话类没有构造函数?

Session 为什么JavaMail会话类没有构造函数?,session,constructor,jakarta-mail,Session,Constructor,Jakarta Mail,没有构造函数,而是使用两个静态方法: getDefaultInstance(属性p) getDefaultInstance(属性p,身份验证器a) getInstance(属性p) getInstance(属性p,验证器a) 所有上述返回会话 从设计的角度来看,是为了避免调用默认的无参数构造函数吗? 或者是其他类似于您不能/不想使用构造函数的情况吗?您可以在这里获得一些信息 对于会话类,优点是只需将方法名称更改为getDefaultInstance或getInstance即可更改行为。如果需要的

没有构造函数,而是使用两个静态方法: getDefaultInstance(属性p)

getDefaultInstance(属性p,身份验证器a)

getInstance(属性p)

getInstance(属性p,验证器a)

所有上述返回会话

从设计的角度来看,是为了避免调用默认的无参数构造函数吗?
或者是其他类似于您不能/不想使用构造函数的情况吗?

您可以在这里获得一些信息


对于
会话
类,优点是只需将方法名称更改为
getDefaultInstance
getInstance
即可更改行为。如果需要的话,还可以提供一个authenticator。

与构造函数相比,静态工厂方法有两个关键优势:

  • 它们可以返回目标类的子类
  • 他们不必每次都创建一个新实例

  • 虽然JavaMail没有利用第一个会话(实际上会话是最终的),但它确实使用第二个会话为getDefaultInstance返回相同的会话对象。虽然这样做是为了支持一个特定的用例,但事实证明,这是一个坏主意,会绊倒很多人,如前所述。

    查看工厂模式以了解更多信息。可以使用构造函数来完成,例如Session(),Session(Authen)为默认值,Session(Prop),Session(Prop,Authen),它适合于类编程IMO。