我一直在思考为我正在研究的框架提供语法糖的方法。我想专门处理Immitable对象。

说我有一个不变的对象,并希望创建它的修改版本。在您看来,具有单个静态工厂方法的非实例化类会违反OO原理吗?




  作为使用字符串的示例:

public final class LOWERCASE {

    private LOWERCASE() {}

    public static String string( final String STRING ) {

      return STRING.toLowerCase();
    }
}

  
  因此,从这个例子中我可以写:

String lowercaseString = LOWERCASE.string( targetString );

  
  我觉得很可读。




是否有反对这种方法的条件?

最佳答案

我认为为每个方法创建一个类不是一个好主意。您可以改为创建一个仅静态方法类,例如StringUtils并实现这些方法。这样,您将调用:

字符串lowerCaseString = StringUtils.lowercase(targetString);

这也将在您键入时为您提供智能帮助。否则,您的课程清单将会太大。即使对于这个简单的示例,您也应该实现一个以上的Lowercase类,以便您还可以考虑必须考虑CulutureInfo的情况。

我认为这不会以任何方式破坏面向对象的原则,或者这是不好的设计。在其他语言(例如Ruby)中,您可以将方法直接添加到String类。以!结尾的方法!表示原始对象已修改。所有其他方法均返回修改后的副本。 Ruby on Rails框架在String类中添加了一些方法,并且关于这是否是一种好的技术存在着一些争论。当然,它绝对方便。

关于java - Java:不可变转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/280706/

10-11 01:30