gpt4 book ai didi

java - 在Java中: How to access static property of dynamically referenced class?

转载 作者:行者123 更新时间:2023-12-01 16:39:57 25 4
gpt4 key购买 nike

在Java中:如何访问动态引用类的静态属性?我举一个简短的例子:

AppleTree.areTheyAllGrown=true;

我只是想动态引用静态属性“areTheseAllGrown”的类,此静态属性可以是 AppleTree 的成员,也可以是其他类的成员,当然,该类也将具有相同的命名静态属性:“are TheyAllGrown” .

只要我的应用程序逻辑要求我有许多其他树类型,如 CherryTree、ApricotTree 等,就意味着 TreeBehaviour 接口(interface)不是足够的解决方案,因为通过专门针对 AppleTree 设置 'are TheyAllGrown',我想标记假设:只有我的 AppleTree 实例,而不是所有 Tree 实例。看到了吗?

你会说:创建一个 AppleTreeImpl 接口(interface)并将属性放在那里......好吧......这将迫使接口(interface) hell ,只为一个属性创建...为我所有不同的树类型创建 Impl 接口(interface)?没有更短的解决方案吗?

当然,我看到了许多其他方法来实现整个内容,并解决动态引用类的需要,但是,我很感兴趣,如果我可以通过这种方法特别做到这一点。也无需过多使用接口(interface)或其他辅助类,也无需过多使用 Tree 类之外的公共(public)属性。

最佳答案

我建议将其放在类(class)之外。在另一个类GrowingRegistry ,您可以在其中查看 map - Map<Class, Boolean> 。所以你可以这样做:

GrowingRegistry.setAllGrown(AppleTree.class, true);

更好的是,您可以实现接口(interface) Tree定义 getTreeType()例如,有 map Map<TreeType, Boolean> ,其中TreeType是一个枚举。所以:

GrowingRegistry.setAllGrown(TreeType.APPLE, true);

要进一步扩展,您可以有 GardenProperties包含“花园”所有属性的对象。

正如我提到的花园 - 整个问题来自于您想要跟踪所有实例化对象的事实。是你实例化了它们,不是吗?因此您可以将所有实例放入您的集合中。例如:

Garden garden = new Garden();
garden.add(new AppleTreeImpl());
garden.add(new CherryTreeImpl());

您可以将实例存储在 List 中或Map ,并使用花园作为所有属性(property)的持有者。

关于java - 在Java中: How to access static property of dynamically referenced class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4926167/

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