- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在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/
我是一名优秀的程序员,十分优秀!