Java 使用枚举避免类型比较
我正在构建一些需要利用多态性的东西,我想知道这种避免类型比较的方法有什么缺陷 本质上,我希望在基类中放置一个枚举,然后根据当前类的类型更改该枚举的值,然后使用该枚举进行类型比较 因此,对于施工人员:Java 使用枚举避免类型比较,java,enums,type-conversion,Java,Enums,Type Conversion,我正在构建一些需要利用多态性的东西,我想知道这种避免类型比较的方法有什么缺陷 本质上,我希望在基类中放置一个枚举,然后根据当前类的类型更改该枚举的值,然后使用该枚举进行类型比较 因此,对于施工人员: public class Animal{ private AnimalType animalType; // the enum public Animal(AnimalType animalType) { this.animalType = animalTy
public class Animal{
private AnimalType animalType; // the enum
public Animal(AnimalType animalType)
{
this.animalType = animalType;
}
public getAnimalType()
{
return animalType;
}
}
public class Cat{
public Cat()
{
super(AnimalType.CAT);
}
}
public class Dog{
public Dog()
{
super(AnimalType.DOG);
}
}
而不是:
if (dog instanceof Dog)
我们:
if (dog.getAnimalType() == AnimalType.DOG)
那么这会对计算速度产生影响吗?在这样做的时候,你能想到哪些缺陷?当我提出这一点时,我个人是否错过了一些重要的东西
我知道出于各种原因,这并不完美,但如果每秒要执行数千次这样的比较,那么减少几微秒是值得的。这可能比
instanceof
快一点,但这不是使用它的好理由,除非你已经证明(通过基准测试)它确实对您的应用程序产生了重大影响。否则,重要的因素是可维护性、可读性、可用性、可扩展性等,这些因素可能不会产生任何显著的影响。但是维护任务可能略有不同(对于enum,需要维护一个额外的单元),AnimalType
enum需要在每次创建Animal
的新子类时进行维护。即使每秒进行数千次比较,性能差异也可能可以忽略不计。更重要的是,这两种方法并不相同。如果Dog
获得子类,子类是否获得自己的枚举?此外,继承的一个基本假设是父类不需要知道子类。您没有设置每次扩展父类时都必须对其进行更改。请参见此处: