提问人:Chethan Swaroop 提问时间:11/4/2023 更新时间:11/4/2023 访问量:47
在 Java 中传递 Main 类和扩展的 Abstract 类之间的 Map
Passing a Map between Main class and and an extended Abstract class in Java
问:
我有一个 Main 类,其中声明了一个 Map,并将其作为对扩展 Abstract 类的类的引用传递
MainClass.java:
public class MainClass{
private final Map<String, String> folderMap = new HashMap<>();
public static void main() {
Tester testObj = new TesterImpl(folderMap);
testObj.implementation();
System.out.println(folderMap); //[key1,value1]
}
}
Tester.java:
public abstract class Tester {
public abstract void implementation();
}
TesterImpl.java:
public class TesterImpl extends Tester {
private final Map<String, String> folderMap = new HashMap<>();
public TesterImpl(Map<String, String> folderMap) {
this.folderMap = folderMap;
}
public void implementation() {
folderMap.put("key1","value1");
}
}
问题是当我在 MainClass.java 中打印 folderMap 时,当我刚刚传递 folderMap 的引用时,它如何具有在 TesterImpl 类中添加的 folderMap 的值。
此外,这是实现跨类共享 folderMap 变量的最佳方式吗?如果没有任何关于更好方法的建议?
答:
1赞
Reilas
11/4/2023
#1
"...问题是当我在MainClass.java中打印folderMap时,当我只是传递folderMap的引用时,它如何具有在TesterImpl类中添加的folderMap的值。..."
可能,你的术语混淆了。
将 Object 数据类型传递给 TesterImpl,而不是基元数据类型。
在 Java 中,将解析 Object 实例,而不是 Object 的内容或“值”。
相反,如果使用基元数据类型,则传递的是文本值,而不是地址或“实例”。
因此,MainClass 值不受影响。
C、C++ 和 Rust 等语言为原始数据类型提供了你所指的概念。
该主题通常称为“引用”。
"...这是实现跨类共享 folderMap 变量的最佳方式。如果没有关于更好的建议吗?
最佳方法取决于 folderMap 的累积使用量。
如果是单个操作,我想你所拥有的是有效的。
否则,通过继承使 folderMap 可供 TesterImpl 使用。
class MainClass{
Map<String, String> folderMap;
public static void main(String[] args) {
Tester testObj = new TesterImpl();
testObj.implementation();
System.out.println(folderMap); //[key1,value1]
}
}
abstract class Tester extends MainClass {
public abstract void implementation();
}
class TesterImpl extends Tester {
public void implementation() {
folderMap.put("key1","value1");
}
}
评论
MainClass
TesterImpl
folderMap
... folderMap = new HashMap<>();