小编vw-*_*ter的帖子

如何在Java中构建复杂的,层次结构的不可变数据结构?

我正在为客户构建一个Java库,他们想要的东西之一就是他们使用的一组特定标准的数据表示.我不想透露客户的利益,但如果他是炼金术士,他可能会想要以下内容:

Elements
  Fire
    Name="Fire"
    Physical
      Temperature=451
      Color="Orange"
    Magical
      Domain="Strength"
  Water
    Name="Water"
    Physical
      Color="Blue"
  Earth
    Name="Earth"
    Magical
      Domain="Stability"
      Ordinality=1
Run Code Online (Sandbox Code Playgroud)

我需要能够按名称访问各种数据元素,例如:

  Elements.Earth.Name
  Elements.Water.Physical.Color
Run Code Online (Sandbox Code Playgroud)

我还需要能够遍历属性,如下所示:

  for (MagicalType attrib : Elements.Fire.Magical)
  {
    ...
  }
Run Code Online (Sandbox Code Playgroud)

我实际上已经能够创建这个数据结构了,我可以做我上面要求的所有事情 - 虽然我不得不为迭代创建单独的数组,所以我真的看起来更像是:

  for (MagicalType attrib : Elements.Fire.MagicalAuxArray)
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法满足我的最后要求:整个数据结构必须是不可变的.我已经反复尝试过,并在网上搜索示例,但到目前为止,我还没能以任何合理的方式完成此任务.请注意,最终的数据结构将非常大; 我真的希望避免一个过于重复或创造太多公共符号的解决方案.

我是一名非常有经验的程序员,对Java不太熟悉.任何人都可以建议我如何代表上述数据以满足我的所有要求吗?

java

6
推荐指数
1
解决办法
327
查看次数

如何在Java中存储对类的引用?

在Java中有什么方法可以存储对类的引用吗?这就是我想要做的事情:

public class Foo
{
    public static void doSomething() {...}
};

SomeClass obj = Foo;
obj.doSomething();
Run Code Online (Sandbox Code Playgroud)

是否有一些类"SomeClass"允许我存储对类的引用,以便我以后可以使用该存储对象来调用原始类的静态成员?

显而易见的是类Class:

Class obj = Foo.class;
obj.someMember().doSomething();
Run Code Online (Sandbox Code Playgroud)

但我还没想出哪个班级成员可能扮演"someMember()"......我认为他们都不是.

有谁知道我在Java中尝试做的事情是否可行?

java

4
推荐指数
1
解决办法
3260
查看次数

标签 统计

java ×2