gpt4 book ai didi

java - 运行时填充的类枚举类

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:01 24 4
gpt4 key购买 nike

我有很多对象使用很少的类(意味着元素可视化分类,就像在 html+css 中)。类在编译时是未知的,它们在条件中多次使用。

为了提高性能,我有一个解决方案:

public class ElementClass {

private static final Map<String, ElementClass> classes = new HashMap<>();

public final String name;
public final String lowerName;

public ElementClass(String name, String lowerName) {
this.name = name;
this.lowerName = lowerName;
}

public static ElementClass get(String name) {
String lower = name.toLowerCase();
ElementClass c = classes.get(lower);
if (c == null) {
c = new ElementClass(name, lower);
classes.put(lower, c);
}
return c;
}
}

get 方法的使用远少于 ElementClass 变量的比较。它用于解析配置和一些 static 变量。我不确定这是否是最好的方法,因为我是 Java 初学者。

ElementClass的使用示例:

// contains element styles based on it's class
Map<ElementClass,ElementStyle> styles;

void exampleFunction() {
ElementClass c = ElementClass.get("special");
for( Element e : elements ) {
if( e.cls == c ) doSomethingSpecial();
}
}

最佳答案

这将是教科书式的缓存实现。如果 ElementClass 不多,并且您的程序是单线程的,这就足够了。

我认为没有必要在 ElementClass 中保留小写名称。将其用作映射键就足够了。我还假设您的项目中的 ElementClass 还有更多内容,因为现在它只包含一个名称。

更新

经过澄清后,很明显您确实只打算使用 String name。在这种情况下,让每个 Element 只包含其小写名称会好得多,但是 interned:

public Element(String name) {
this.name = name.toLowerCase().intern();
}

然后您可以比较 element.name == "special" 并保证匹配任何等于 "special"的名称。

关于java - 运行时填充的类枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12132767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com