繁体   English   中英

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

[英]Best way to access hard Coded Map or array etc. in C# and java (languages that have GC )

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

选项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#中最好的方法是哪一种? 还是有选择?

垃圾收集器不会收集静态引用-规则是,当任何活动线程无法访问该对象时,该对象就可以进行垃圾收集。 静态对象始终是可访问的,因此永远不应该收集它们: 链接

对于您的示例,这里有一些好的做法建议:

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

-不要使用实例方法来访问静态字段。 这使得混乱,难以阅读的代码成为可能。

-尝试避免对数据进行硬编码-您可以使用属性文件来存储此地图信息吗? 然后,如果您以后需要更改它,它将是可配置的。

-也许在这里满足您的需求,但是可能值得研究枚举单例模式,而不仅仅是静态字段。

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

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

 public Map getMap(){
   return map;
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM