得到奇怪的java.lang.NoSuchMethodError错误

时间:2012-02-08 22:14:49

标签: java methods

我有一个名为Namable

的界面
public interface Namable { public String getName(); public void setName(String name); };

有几个类会实现这个。

当我制作这样的代码时:

Namable foo = new X(); foo.getName();

(X是实施类)

我收到错误:

java.lang.NoSuchMethodError: Namable.getName()Ljava/lang/String;

这对我来说很奇怪,我想知道为什么会这样,有什么想法吗?

可编辑的例子:

Namable课程:

public interface Namable 
  {
    public String getName();
  }

扩展第X类:

public class X extends java.util.ArrayList implements Namable 
{
  private String name;
  public X() 
  {
    this.name = "bar";
  }
  public String getName() 
  {
    return name;
  }
}

测试类:

public class Test 
{
  public static void main() 
  {
    Namable foo = new X();
    foo.getName();
  }
}

运行之后,我得到了同样的错误。我正在使用BlueJ

4 个答案:

答案 0 :(得分:3)

我已经使用您在此处给出的类运行了一个示例,并且一旦主方法更改为:

它就会按预期工作
public static void main(String[] args)

但是,当您使用BlueJ时,这可能不是问题(我记得BlueJ使用特殊机制来运行类)。

您的类路径中是否有另一个班级Nameable?检查包导入并确保它是您定义的接口。看来错误在于您的环境而不是代码。

答案 1 :(得分:2)

您需要致电

foo.getName()

X.getName()

您正在尝试调用不存在的类(静态)方法。

它应该是Namable foo = new X(); - 您的示例代码甚至不应该如图所示进行编译。

您能提供SSCCE吗?

更新了以下更正和SSCCE:现在只是一个疯狂的猜测,但BlueJ是否已经定义了Namable,或者您是否在另一个可能导入的包中有Namable?如果你在上面的例子中将Namable重命名为Namable2,会发生什么?

答案 2 :(得分:0)

正如DNA所说,使用SSCCE你的帖子会更好

我的猜测是,也许你可能错过了一个" static"主要功能中的关键字

public static void main(String args[]) 

public void main(String args[]) 

也可能是类路径问题......或者文件名和类不匹配。或者别的什么。

答案 3 :(得分:0)

当我运行您的代码段时,显示的错误是

  

错误:在Test类中找不到主要方法,请定义main   方法为:public static void main(String [] args)

main方法更改为

public static void main(String[] args)

我没有得到

  

java.lang.NoSuchMethodError:Namable.getName()Ljava / lang / String;

使用您提供的代码段。