内部类作为外部类的一部分

3
假设我有一个玩具店,我有一个网页可以购买这些玩具。每个玩具都有自己的特点,但为了表示人形玩具,我有一个名为HumanToy的类,其中包含一些属性,如身高、体重等。但我有一个嵌套属性,它本身是一个JavaBean,名为HumanLegs,这个类有自己的特点,如:
public class HumanToy {     

    private Double height;
    private Double weight;

    private HumanLegs humanLegs;

    private class HumanLegs {

        private Double height;
        private Double weight;
    }

我的问题是:这个玩具有一个静态的HumanLegs类有意义吗?我是指,从概念上讲,HumanLegs不能单独存在,它们只能随着玩具的存在而存在,因此我认为在第一时间将其作为内部类(而不是单独的类)是合乎逻辑的,其次,由于同样的原因,它不应该是静态的,我是说,只有实例化一个HumanToy才能获得一个HumanLegs对象,或者要获取一个HumanLegs对象,你需要一个HumanToy对象。这样想对吗?

2
当然,如果它们在你构想的世界中无法分开,那么这正是正确的思考方式。注意:如果不必要,则不要使用double的对象包装器。 HumanLegs成员字段应写为humanLegs。顺便说一句,现在很多人更喜欢不可变对象和构建器而不是可变bean。哦,我想你可以称它为Legs,并将其引用为HumanToy.Legs - Maarten Bodewes
没错。非常合理。如果你想在HumanToyLegRobotToyLeg之间共享代码,那么它们可以自由地实现/扩展ToyLeg接口/类。 - CJDood
1个回答

3

是的,这是有道理的,因为HumanLegs保留了对其外部类的引用。 如果将HumanLegs实例移到另一个HumanToy实例中,则原始的HumanToy不会被删除,因为HumanLegs保留了对它的引用。

因此,外部类至少在内部类的所有实例存在期间都会被保留在内存中。


外部类不允许奔跑 :) - Maarten Bodewes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接