![](/img/trans.png)
[英]What is the best way to call C/C++ code from other languages such as Java, PHP, Perl, Python, etc?
[英]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.