使用带有嵌套静态 classes 的 class 的良好做法,然后使用更多静态方法扩展包私有抽象 classes 以保持组织性?

Good practice to use a class w/ nested static classes, that then, extend package-private abstract classes with more static methods to stay organized?

也许我没有看到它,但我想不出这会导致什么问题,因为扩展抽象 class 的静态 class 无法实例化,但也许存在是我应该改用的设计模式。

这是我所说的一个例子:

public class PetTrainer
{
    public PetTrainer(...)
    {...}

    public static class LeashInstruction extends LeashInstructionAbstract
    {
    //No Code
    }
}

在同一个包内:

abstract class LeashInstructionAbstract
{
    public static void giveTreat(...)
    {...}

    public static...
    //imagine more
}

只是为了澄清静态方法是在 subclass 中继承的,但它不是多态的,因为你不能覆盖它们,尽管当你在 sub 中有一个具有相同签名的方法时你可以隐藏它class。如果你想让事情变得更干净,你不需要创建一个空的静态 class。 这是我根据您想要实现的目标提出的两个建议。 1. 如果所有宠物训练器的 LeashInstruction 都相同,那么您可以执行以下操作:

public class PetTrainer 
{
    public PetTrainer(...)
    {...}

}

和:

abstract class LeashInstructionAbstract {
    public static void giveTreat() {}
}
  1. 如果 PetTrainer 中的行为会发生变化 class 那么我建议执行以下操作(使用抽象方法的接口):

    public class宠物训练师{ LeashInstructionImpl leashInstruction = new LeashInstructionImpl(); public宠物训练师(){ }

    public static class LeashInstructionImpl implements LeashInstruction {
        @Override
        public void giveTreat() {
            //somthing
        }
    }
    
    // Just for testing
    public static void main(String[] args) {
        PetTrainer petTrainer = new PetTrainer();
        petTrainer.leashInstruction.giveTreat();
    }
    

    }
    LeashInstruction 将是:

    接口 LeashInstruction { void giveTreat(); //想象更多
    }

希望这会有所帮助。

这个策略有很多问题,当我回顾这个问题从我年轻的时候开始,并试图回答它。第一个也是最大的问题是它给我的 ide、copy/pasting 所有那些 类 带来的负担,如果我不得不这样做的话。正如@GhostCat 正确指出的那样,此策略的第二个问题是设计中有些可疑的东西,它不是 OOP。如果你在 Java 中这样做,那么你不妨切换到函数式语言,因为它会更有效率。这种策略是 OOP 的变体,变得难以管理。