我写了一个方法 batchDeleteProject(java.util.List condition)
我在另一个类去调用它:
List condition = new ArrayList(1);
objProjectMan.batchDeleteProject(condition);却报种异常:
java.lang.NoSuchMethodError: com.comtop.projectms.delegate.ProjectMan.batchDeleteProject(Ljava/util/List;)
是怎么回事?
Ljava.util.List跟java.util.List有什么区别?

解决方案 »

  1.   

    胡扯,谁告诉你Ljava/util/List; 前面的L表示数组了?
    L表示这个东西是一个对象型数据,这个东西是类签名,java底层对类的访问都是使用java/lang/String这种方式,而不是java.lang.String这种方式,L则是表示,这是一个对象类型的数据,例如I 表示int类型的数据,记住基础类型数据都有自己的表现形式。
    数组的表现形式是在之前加上一个[ 例如数组List [] list;那么他的形式就是“[Ljava/util/List;”,几维数组前面就是几个[ 在例如 int [][] i;的表现形式就是 [[I
      

  2.   

    楼主所报的异常是没有在类com.comtop.projectms.delegate.ProjectMan中找到方法batchDeleteProject(List list);
    如果楼主查看到源代码中有这个方法,你就要重新编译一下这个java文件,如果这个方法不是你写的,而是在一个包中,那么你要替换掉这个包到一个适合的版本。
      

  3.   

    本帖最后由 AWUSOFT 于 2009-05-31 00:27:47 编辑
      

  4.   


    是我胡扯?还是你胡扯呢?自己测试 System.out.println(String[].class); 
     System.out.println(String.class); 
      

  5.   

    呵呵,估计你们都是看<java虚拟机>看来的,这没什么好争的,也就是一个参数类型而已
    楼主先确认下com.comtop.projectms.delegate.ProjectMan是不是存在该方法先吧。
      

  6.   

    你看清楚,String[].class输出的是 [Ljava.lang.String 还是LJava.lang.String,很明显前面有个[符号来表示为数组,至于String.class没有输出L是因为吧它省略了,如果你有过jni开发经验对这个就不会陌生,甚至如果你对class文件结构有所了解也不会陌生,拜托你不要不懂装懂,自己一厢情愿的认为String[].class这个东西输出前有个L而String.class没有L就认为L表示的是数组,L所表示的是这个类型为对象类型,如果你用的是 int[].class,这种情况没有L,只有一个[I,那你要如何自圆其说呢?或者double[].class输出为[D的情况呢?很明显就是[代表的是数组而I或者D又或者L表示的是数据的类型了,而L表示的是对象型,对象需要指向一个类,所以L后面会有包名加上类名以分号结尾的类签名。
    像你这样学会了一二三怎么写就说四是四条横线那是不行的。
      

  7.   

    Ljava.util.List应该是java.util.List在JVM中的标志吧
      

  8.   

    Ljava.util.List跟java.util.List有什么区别?--------------------------------------------
    Ljava.util.List 你少了一个分号,这个是字段在 JVM 内部的表示。L 表示对象类型,后面跟着的是规范类名,最后加个分号。而 java.util.List 纯粹的就是一个类名。如果你看到的是 [[Ljava.util.List; 表示的是一个 List 的二维数组,有多个少 [ 就是多少维数组。参考:http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#14152