在Java中:如何访问动态引用类的静态属性?

Pat*_*aDJ 0 java syntax static properties class

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

AppleTree.areTheyAllGrown=true;
Run Code Online (Sandbox Code Playgroud)

我只是想动态引用静态属性的类'areTheyAllGrown'这个静态属性可以是AppleTree的成员,也可以是其他一些类的成员,其中cource也会有相同的命名静态属性:'areTheyAllGrown'.

只要我的应用程序逻辑要求我有许多其他树类型,如CherryTree,ApricotTree等,这意味着接口TreeBehaviour不是足够的解决方案,因为通过设置AppleTree的'areTheAAllGrown',我想标记让我们说:只有我的AppleTree实例,而不是所有Tree实例.看到?

你会说:制作一个AppleTreeImpl接口并将属性放在那里......好吧......这会强制接口,仅为一个属性创建... Impl接口用于我所有不同的树类型?是不是有更短的解决方案?

当然,我看到许多其他方法来实现整个内容,并且需要动态引用类,但我感兴趣如果我能通过这种方法特别做到这一点.也没有过多使用接口或其他辅助类,也没有Tree类之外的公共属性.

Boz*_*zho 6

我建议把它放在课外.在另一个班级GrowingRegistry,你可以有一张地图 - Map<Class, Boolean>.所以你可以这样做:

GrowingRegistry.setAllGrown(AppleTree.class, true);
Run Code Online (Sandbox Code Playgroud)

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

GrowingRegistry.setAllGrown(TreeType.APPLE, true);
Run Code Online (Sandbox Code Playgroud)

要进一步扩展,您可以拥有GardenProperties包含"花园"所有属性的对象.

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

Garden garden = new Garden();
garden.add(new AppleTreeImpl());
garden.add(new CherryTreeImpl());
Run Code Online (Sandbox Code Playgroud)

在那里,您可以将实例存储在一个List或中Map,并且还可以使用花园作为所有属性的持有者.