abstract public class MibData implements Cloneable
{
    private LinkedHashMap mibInfo = new LinkedHashMap();
    public LinkedHashMap getMibInfoMap()
    {
        String[][] arr = getMibInfoArr();        for (int i = 0; i < arr.length; i++ )
        {
            mibInfo.put(arr[i][1], arr[i][0]);
        }        return mibInfo;
    }
    abstract protected String[][] getMibInfoArr();
}
请问getMibInfoMap()方法实现什么样的功能,abstract protected String[][] getMibInfoArr();这句怎么解释?

解决方案 »

  1.   

    getMibInfoMap()方法把一个二维的字符串数组的每一行的第一个元素和第二个元素作为值和键存放到一个LinkedHashMap里。然后返加这个LinkedHashMap。getMibInfoArr(); 这个方法为一抽象方法,由子类来实现
      

  2.   

    abstract protected String[][] getMibInfoArr();定义一个抽象方法,返回一个二维字符串数组
    getMibInfoMap() 就是把返回的这个二维字符串数组赋值给一个LinkedHashMap并返回,其中键为二维数组每行的第1个元素,值为二维数组每行的第0个元素
      

  3.   

    给你重构下。
    abstract public class MibData implements Cloneable 

        private Map mibInfo = new LinkedHashMap();     public Map getMibInfoMap() 
        { 
            String[][] arr = getMibInfoArr();         for (int i = 0; i < arr.length; i++ ) 
            { 
                mibInfo.put(arr[i][1], arr[i][0]); 
            }         return mibInfo; 
        } 
        abstract protected String[][] getMibInfoArr(); 
    }
      

  4.   

    既然用了LinkedHashMap,你竟然改成了Map,你究竟懂不懂?
      

  5.   


    你没看到 Map map = new LinkedHashMap();你学过面向对象吗?楼主的给他点提示,我都不想说了
      

  6.   

    LinkdeHashMap说明这个Map能保持插入的顺序,或者最近访问的顺序,你变成了Map,使用这个类的程序员,不看你源代码能注意到这一点?别拿裤衩说事.回去好好看书吧.
      

  7.   


    哈哈 map是接口 啊,老大,你还是不懂
      

  8.   

    不过劝楼主最好还是别改,否则,使用的人可能不知道你这个Map是"有序"的.
      

  9.   

    在不清楚lz意图的时候,不同意随意改为Map,松耦合不能抛弃必要的约定;
    getMibInfoMap() 返回的东西是实现了Serializable, Cloneable, Map<K,V> 三个接口的LinkedHashMap ,这个LinkedHashMap 比单纯的Map要有更多的“功能”(Serializable, Cloneable)如果你改成Map,无端端约定的功能就少了(Serializable, Cloneable)
    再者,LinkedHashMap 继承自HashMap,有clone, containsKey, entrySet, isEmpty, keySet....等方法
    单纯的Map接口是没有的说白了
    如果方法是:LinkedHashMap getMibInfoMap() 
    我可以正常的 getMibInfoMap().entrySet();如果是:Map getMibInfoMap() 
     getMibInfoMap().entrySet();就危险了....当然,在你的实现是把mibInfo 赋了LinkedHashMap 
    但是你要注意,你的方法是要被调用的,你返回的是Map(因为你写的是Map)
    调用者怎么知道你返回的到底是HashMap还是LinkeHashMap还是其他什么实现了Map的其他类?总之,如果改为Map getMibInfoMap() ,你的返回对象只能使用Map接口中的方法,使用其他方法,都是不可靠的;
      

  10.   

    编译器应该只会warning,代码可以运行但是绝对不推荐这么书写代码,随便找一个最顶层的类或者对象来声明变量,不是所谓的“松耦合”
      

  11.   

    另外,多态的举例class Car
    {
         go()
         {
             // 10KM/H;
          }
    }class BMW
    {
         go()
         {
             //400KM/H;
          }
    }class QQ
    {
         go()
         {
             //100KM/H;
          }
    }
    然后public Car getACar()
    {
         return new BMW();
    }Car c=getACar();
    c.go();  //400KM/H  不同子类对父类的同一个行为有不同实现,在这种情况下,将方法返回的东西声明为父类,才是合理