我有一个名为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
答案 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;
使用您提供的代码段。