谁告诉你getMethod只能返回public的?

解决方案 »

  1.   

    查过Class.getMethod源码只能获取public 方法
      

  2.   


    查了下文档确实是只能返回public的,我二了这样看的话junit确实有点多此一举
      

  3.   

    junit作者是世界级大师,这么做一定有足够的理由,可是到底是什么呢?哪位前辈可否指点一二?
      

  4.   

    good question, 但是大师不一定出来的都是大师级的。比如JDK,里面的String代码,就出现过一个性能方面的问题,至今(应该)还留在1.6的代码里面:    public boolean contentEquals(CharSequence cs) {
            if (count != cs.length())
                return false;
            // Argument is a StringBuffer, StringBuilder
            if (cs instanceof AbstractStringBuilder) {
                char v1[] = value;
                char v2[] = ((AbstractStringBuilder)cs).getValue();
                int i = offset;
                int j = 0;
                int n = count;
                while (n-- != 0) {
                    if (v1[i++] != v2[j++])
                        return false;
                }
            }
            // Argument is a String
            if (cs.equals(this))
                return true;
            // Argument is a generic CharSequence
            char v1[] = value;
            int i = offset;
            int j = 0;
            int n = count;
            while (n-- != 0) {
                if (v1[i++] != cs.charAt(j++))
                    return false;
            }
            return true;
        }1.7已经修复,差异就在对于AbstractStringBuilder子类,在判断过长度相同,且遍历过所有字符后,就可以断定内容相同了,可以直接return true,没必要再历经一次charAt的遍历到最后一行才return 出来。    public boolean contentEquals(CharSequence cs) {
            if (count != cs.length())
                return false;
            // Argument is a StringBuffer, StringBuilder
            if (cs instanceof AbstractStringBuilder) {
                char v1[] = value;
                char v2[] = ((AbstractStringBuilder)cs).getValue();
                int i = offset;
                int j = 0;
                int n = count;
                while (n-- != 0) {
                    if (v1[i++] != v2[j++])
                        return false;
                }
                return true; // <------- CHANGE SINCE 1.7
            }
            // Argument is a String
            if (cs.equals(this))
                return true;
            // Argument is a generic CharSequence
            char v1[] = value;
            int i = offset;
            int j = 0;
            int n = count;
            while (n-- != 0) {
                if (v1[i++] != cs.charAt(j++))
                    return false;
            }
            return true;
        }
      

  5.   

    补充一下,修改是since JDK7b03, 1.5,1.6代码永远不会修改
      

  6.   

    JDK要是改了呢?再重新检查一编所有代码有没有漏洞,或者JDK更新一次我也更新一次?
      

  7.   


    这个和JDK版本没关系。这个方法(getMethod)从一开始,就被设计为(同时也是实现为)只返回public的,其他可能有变数,具体见API文档。但是public这点是没问题的。
      

  8.   

    楼上大侠说的在理,不过LZ还是宁愿相信junit的大师不会犯错,那么做一定是有他的理由的
      

  9.   

    求高人指点一二到底为何junit大师要多此一举?