通用代码的 superclass 与 utility class

superclass vs utility class for common code

我在 2 classes 中使用相同的方法将字段从一个对象复制到构建器。我想重构它,但我不知道是否应该在实用程序 class 中创建静态方法或将其抽象为超级 class.

共享此代码的 classes 是 Bean 和多线程应用程序的一部分。

方法如下:

protected static void copyPartyGroup(Message.Builder msgBuilder, 
    final PartyGroup partyIDsGroup, Party.Builder rartyBuilder) {

    rartyBuilder.setPartyID(partyIDsGroup.getId())
    ....

    msgBuilder.setID(partyIDsGroup.getId())

    ....

}

非常感谢您的帮助。

你也可以使用trait in java 8,它是一个带有默认方法的接口

参见:https://opencredo.com/traits-java-8-default-methods/

或:https://dzone.com/articles/using-traits-in-java-8

如果你的两个 class 不共享同一个父结构,不要使用超级抽象 class,如果创建这个超级 class 的唯一原因是共享你的方法 copyPartyGroup 不是一个好的做法。

参见:Liskov 替换原则

如果您想遵守单一职责原则:

我认为您必须创建一个服务 class。 在你的例子中,可能是一个线程安全的单例,带有 rartyBuilder.setPartyIDmsgBuilder.setID 的同步方法。 (参见 Initialization-on-demand holder idiom

如果你可以提取静态方法,那么最好直接这样做。

使用继承来共享代码会耦合您的代码,并使以后很难理清。