gpt4 book ai didi

java - 有什么方法可以在 Java 中模仿 Ruby 中的类实例变量概念吗?

转载 作者:行者123 更新时间:2023-12-02 01:40:17 25 4
gpt4 key购买 nike

假设我有一个 Animal 类,及其两个子类,即 Dog 和 Cat。我想记录 Dog 和 Cat 类的实例数量(例如 {Dog: 3, Cat: 1})。

class Animal{
static int instances = 0;
public Animal(){
instances++;
}
}

我可以使用Animal.instances来获取所有动物的数量。但是,我想分别获得每种动物的计数。如何在不在所有子类的构造函数中重复相同的代码的情况下实现此目的?

最佳答案

不要依赖静态或 reflexively checking the class name .

解决这个问题的最好方法是将创建对象的责任推迟到工厂:

interface AnimalFactory<T extends Animal>
{
T create();
}

interface CountingAnimalFactory<T extends Animal> extends AnimalFactory<T>
{
int numberOfAnimals();
}

public class CountingDogFactory implements CountingAnimalFactory<Dog>
{
private int numberOfDogs;

public Dog create() {
numberOfDogs++;
return new Dog();
}

public int numberOfAnimals() {
return numberOfDogs;
}
}

您可以将 DogCat 的构造函数设置为包私有(private),以强制它们通过工厂实例化。

关于java - 有什么方法可以在 Java 中模仿 Ruby 中的类实例变量概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54552719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com