gpt4 book ai didi

java - 在 C# 和 java(具有 GC 的语言)中访问硬编码映射或数组等的最佳方法

转载 作者:行者123 更新时间:2023-12-01 11:22:21 24 4
gpt4 key购买 nike

在具有垃圾收集器的编程语言中,访问硬编码变量和对象的最佳方式是什么。我有两个选择:

选项 1:

class Hello {
void retrieveData() {
Map map = App.staticMap;
}
}

public class App {
public static Map map = new Map<>() {
"a", "b",
"b", "d",
//hundreds of lines
}
}

选项 2:

class Hello {

void retrieveData() {
//let assume App instance is declared when program is started.
Map map = App.getInstance().dataMap;
}
}

public class App {
private static App instance;
Map dataMap = new Map() <> {
//hundreds of lines
}

public static App getInstance() {
return instance;
}
}

由于垃圾收集器,我找不到最好的方法。当我调用静态变量时,垃圾收集器可能会在调用之前收集它。我想同样的事情对于实例对象也是有效的。 JAVA 和 C# 哪一种最好?或者有什么选择吗?

最佳答案

垃圾收集器不会收集静态引用 - 规则是,当任何 Activity 线程都无法访问某个对象时,该对象就有资格进行垃圾收集。静态对象始终是可访问的,因此永远不应该收集它们:link

对于您的示例,以下是一些良好的实践建议:

-不要直接访问字段,最好提供一个 getter。这使您可以灵活地在以后更改您的实现。

-不要使用实例方法访问静态字段。这会导致代码困惑且难以阅读。

-尽量避免硬编码数据-您可以使用 properties file存储这个 map 信息?如果您以后需要更改它,那么它是可配置的。

-也许这里超出了您的需求,但可能值得研究一下 enum singleton模式而不仅仅是静态字段。

如果你真的想对其进行硬编码,我的首选实现是

public class App {
private static Map map = new Map<>() {
"a", "b",
"b", "d",
//hundreds of lines
}

public Map getMap(){
return map;
}
}

关于java - 在 C# 和 java(具有 GC 的语言)中访问硬编码映射或数组等的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31079879/

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