如果我有以下类层次结构,我如何获得Map <string,string =“”>?

时间:2015-10-13 06:57:51

标签: java oop object hashmap

我的核心对象在我的类层次结构中以下列方式包装。

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程序员。这里写的代码只是为了说明我想做什么。它可能在语法上不正确。

感谢。

4 个答案:

答案 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)

我会引用你的一些错误:

  • 你不能实现java.util.map,因为它是一个抽象类,使用新的HashMap()代替
  • coreObj.doSomething:语法错误 - &gt; coreObj.doSomething();
  • coreObj.doSomething:不是静态方法,所以你不能像那样访问
  • 列表listOfB =新列表;列表是抽象的,因此请使用新的ArrayList&lt;&gt;()代替。

还有其他错误,但这些是

关于层次结构,这些是一些例子:

  • 一个扩展另一个的类,例如:B类扩展C
  • 具有实例或另一个类(属性)列表的类

还有其他方法可以实现层次结构

要获取另一个类的属性,最好的方法是使用访问器(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>();
}