2012-02-08 51 views
0

我有一个名为命名的获得奇怪java.lang.NoSuchMethodError错误

接口
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;

这是很奇怪的我和我想知道为什么会发生这种情况,有什么想法?

可编译例子:

命名的类:

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的

+0

在'Namable foo = X()'中是否缺少'new',或者''是静态工厂方法?你有没有用代理类做任何异乎寻常的事情?你是否使用了一个奇异的框架,就像使用代理类的DI框架或测试存根框架? – 2012-02-08 22:18:51

+1

请为此问题提供更多代码(和正确的代码)。我认为你太简单了,无法准确描述问题。 – 2012-02-08 22:19:45

+0

好的,代码中有一个“新”,X只是一个类(X也恰好扩展了ArrayList,这可能是它的一部分吗?)。我没有做任何奇怪的事情......事实上,我把这个问题摆脱了上下文,并试图按照上面的方式进行调试,并且仍然给出相同的错误。 – Alan 2012-02-08 22:27:34

回答

3

我已经运行的例子与大家在这里给出的类和它的作品如预期一旦主要方法改为:

然而,当你使用BlueJ的,这可能不是一个问题(我记得BlueJ使用特殊的机制来运行类)。

你的类路径中是否有另一个类Nameable?检查软件包导入并确保它是您定义的界面。看起来错误在于你的环境,而不是代码。

+0

这似乎是个窍门。代码与它无关,一旦我调整了这些问题就消失了。谢谢! – Alan 2012-02-08 22:58:04

2

你需要调用

foo.getName() 

X.getName() 

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

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

你能提供一个SSCCE吗?

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

+0

哦亲爱的..我很抱歉,这是一个错字,我打电话给它的实例名称的方法 – Alan 2012-02-08 22:19:24

0

正如DNA指出您的文章是用SSCCE更好

我的猜测是,也许你可能已经错过了主要功能的“static”关键字

public static void main(String args[]) 

public void main(String args[]) 

也可能是类路径问题...或文件名称和类不匹配。或者是其他东西。

+0

如果问题是类路径或名称不匹配问题我应该如何解决它。我从来没有遇到这样的事 – Alan 2012-02-08 22:54:30

0

当我跑到你的代码片段,显示的错误是

Error: Main method not found in class Test, please define the main method as: public static void main(String[] args)

main方法更改为

我没有得到

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

与给定的代码段。

+0

我开始相信这是BlueJ的问题......我创建了一个全新的项目来测试我的代码片段并得到了相同的错误 – Alan 2012-02-08 22:53:26