我的核心对象在我的类层次结构中以下列方式包装。
class coreObj {
Map<String, String> map = new Map<String, String>;
Map<String, Object> mapObj = new Map<String, Object>;
Object doSomething(){
fillMap(map);
mapObj("somestring",mapObj);
return mapObj;
}
}
class B {
String some_metadata;
// stores mapObj as Object
Object bObj;
void setbObj(){
bObj = coreObj.doSomething;
}
}
class C {
// stores list of objects of class B
List<B> listOfB = new List<B>;
}
现在,我想从另一个班级得到coreObj.map说D.我该怎么办呢?此外,这个设计有什么问题吗?有什么设计模式我应该适用吗?
注意:我是一名中介java程序员。这里写的代码只是为了说明我想做什么。它可能在语法上不正确。
感谢。
答案 0 :(得分:0)
此处没有层次结构,您可以使用以下内容访问coreObj.map
:
(Map<String, String>) ((Map<String, Object>) c.getlistOfB().get(i).getbObj()).get(key);
但这确实是一团糟......你应该找到一种更简洁的方法来实现你的逻辑。
答案 1 :(得分:0)
我不确定你想从上面的代码中实现什么。 但是,如果您只想从一个类访问另一个类的map对象。 然后它非常简单。
我们假设你有这个类 A 来创建和存储地图值
public class A{
private Map<String, String> map = new Map<String, String>;
private Map<String, Object> mapObj = new Map<String, Object>;
A(){
map.put("key","val");
mapObj.put("key",map);
}
//getter
public Map<String, Object> getMapObj(){
return mapObj;
}
}
然后在课程 B
public class B{
A a = new A();
Map<String, Object> mapObj = a.getMapObj();
}
或者您将A类中的实例变量声明为静态变量,以便在不实例化A类的情况下访问它。
不清楚,你要做什么。 无论如何,这将是许多不同类之间访问数据的方法之一。
答案 2 :(得分:0)
考虑到您希望获得mapObj
中的class C
。我希望以下代码可以满足您的需求但不清楚。
public class C {
// stores list of objects of class B
List<B> listOfB = new ArrayList<B>();
B b = new B();
void differentmethod() {
listOfB.add(new B());
// toget coreObj.map here
Map<String, String> mapObj = ((Map<String, String>) ((Map<String, Object>) listOfB.get(0).getbObj()).get("someString"));
}
}
答案 3 :(得分:0)
我会引用你的一些错误:
还有其他错误,但这些是
关于层次结构,这些是一些例子:
还有其他方法可以实现层次结构
要获取另一个类的属性,最好的方法是使用访问器(getter / setter)。另一种方法是使属性静态。
class coreObj {
Map<String, String> map = new HashMap<String, String>();
Map<String, Object> mapObj = new HashMap<String, Object>();
public Object doSomething(){
fillMap(map);
mapObj("somestring",mapObj);
return mapObj;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Map<String, Object> getMapObj() {
return mapObj;
}
public void setMapObj(Map<String, Object> mapObj) {
this.mapObj = mapObj;
}
}
class B {
String some_metadata;
// stores mapObj as Object
Object bObj;
coreObj coreObjAttr;
void setbObj(){
bObj = coreObjAttr.doSomething();
}
}
class C {
// stores list of objects of class B
List<B> listOfB = new ArrayList<B>();
}