2015-10-13 57 views
-4

我在我的类层次结构中以下列方式封装了核心对象。如何获得Map <String,String>如果我有以下类层次结构?

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

谢谢。

+2

你应该告诉我们你想做什么。你想在哪里访问地图?另外,这不是有效的Java代码。您不能在类声明中写入语句。你必须把它们包装在方法声明中。 – stevecross

+1

这看起来更像是一些伪java代码而不是有效的java代码。 请详细解释您的问题。 – Stefan

+0

你没有类层次结构,它们是3个不相关的类。 –

回答

0

这里没有等级制度,你可以像访问coreObj.map

(Map<String, String>) ((Map<String, Object>) c.getlistOfB().get(i).getbObj()).get(key); 

但这确实是一个烂摊子。你应该找到实现你的逻辑更清洁的方式。

0

我不确定你想从上面的代码实现什么。 但是,如果你只是想从一个类访问地图对象到另一个类。 然后它很简单。

比方说,你有这个类创建并存储地图值

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.

它不是c学习,你要做什么。无论如何,这将是许多不同类之间访问数据的途径之一。

0

考虑到您想获得mapObjclass 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")); 
    } 
} 
0

我会引用一些你的错误:

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

还有其他的错误,但这些都是一些

关于层次结构,这些都是一些例子:B类扩展了C

  • 一类:扩展另一个,例如

    • 一个类其中有一个实例或另一个类的列表(属性)

    还有另外一种方法来实现hierachy

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