fel*_*ixd 1 java enums cheminformatics
我的目标是使用元素周期表(或列表)来获取有关Java中特定元素的信息.我想通过原子序数和符号进行搜索(但转换应该很简单).
我在这个JQuery插件中找到了这些信息.但它存储为JSON文件.
看起来硬编码信息是最有效的(因为它不会经常更改并且由于性能原因),但是如何将JSON转换为硬编码enum?
以来:
枚举似乎是个不错的选择:
public enum Element {
H(1, "Hydrogen", 1.008, -259.1),
He(2, "Helium", 4.003, -272.2),
Li(3, "Lithium", 6.941, 180.5),
// ... 90+ others
;
private static class Holder {
static Map<Integer, Element> map = new HashMap<Integer, Element>();
}
private final int atomicNumber;
private final String fullName;
private final double atomicMass;
private final double meltingPoint;
private Element(int atomicNumber, String fullName, double atomicMass, double meltingPoint) {
this.atomicNumber = atomicNumber;
this.fullName = fullName;
this.atomicMass = atomicMass;
this.meltingPoint = meltingPoint;
Holder.map.put(atomicNumber, this);
}
public static Element forAtomicNumber(int atomicNumber) {
return Holder.map.get(atomicNumber);
}
public int getAtomicNumber() {
return atomicNumber;
}
public String getFullName() {
return fullName;
}
public double getAtomicMass() {
return atomicMass;
}
public double getMeltingPoint() {
return meltingPoint;
}
}
Run Code Online (Sandbox Code Playgroud)
这里有一些java功夫,值得一解.映射放在一个静态内部(holder)类中,因此它在枚举实例初始化之前被初始化,这样他们就可以将它们添加到它中.如果不在内部静态类中,则不会初始化,因为在枚举类中初始化的第一件事必须是实例,但是在初始化类之前初始化静态内部类.
这种方法意味着实例不需要以任何特定顺序列出(它们可以按字母顺序列出,或者以其他方式列出).
| 归档时间: |
|
| 查看次数: |
6002 次 |
| 最近记录: |