有很多嵌套静态类的类->使用package-private抽象类组织静态方法,然后进行扩展。这是好习惯吗?

时间:2019-06-15 15:36:24

标签: java class static abstract extends

也许我没有看到它,但是我想不出这会引起什么问题,因为无法实例化扩展抽象类的静态类,但是也许我应该使用一种设计模式来代替。

以下是我所谈论的例子:

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

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

在同一包装内:

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

    public static...
    //imagine more
}

2 个答案:

答案 0 :(得分:0)

仅是为了阐明静态方法是在子类中继承的,但是它不是多态的,因为您无法覆盖它们,尽管您可以在子类中使用具有相同签名的方法时将其隐藏。如果您想使环境更整洁,则无需创建一个空的静态类。 这是根据您想要实现的两个建议。 1.如果所有宠物训练师的皮带说明相同,则可以执行以下操作:

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

}

和:

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

    公共类PetTrainer {     LeashInstructionImpl leashInstruction =新的LeashInstructionImpl();     公共PetTrainer(){     }

    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 {    void GiveTreat();    //想象更多
    }

希望这会有所帮助。

答案 1 :(得分:0)

当我回顾我年轻时的这个问题并试图回答它时,这个策略有很多问题。第一个也是最大的问题是它给我的 ide 带来的负担,如果我必须这样做的话,复制/粘贴所有这些类会花费很长时间。正如@GhostCat 正确指出的那样,这种策略的第二个问题是设计有一些可疑的东西,它不是 OOP。如果您在 Java 中执行此操作,那么您不妨切换到函数式语言,因为它会更有效率。这种策略是 OOP 的变种,变得难以管理。