我正在为客户构建一个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中有什么方法可以存储对类的引用吗?这就是我想要做的事情:
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 ×2