Accessor和Mutator方法混淆

时间:2009-10-28 19:57:57

标签: java

好的,基本上问题是

  

访问器和Mutator方法假设   班级宠物有一个   名为name的变量/字段   输入字符串>

     

编写一个访问器方法getName()   返回名称Enter的值   你在这个方框中的答案

我编写了如下代码:

public getName(String name)
{
    return name;
}
  

写一个mutator方法setName(),用   可以使用的返回类型的void   当改变名字的价值时   宠物改变了主人。输入你的答案   在这个方框中

我写道如下:

public void setName(int newName)
{
    name = newName;
}

我似乎很困惑,因为我没有得到标记,我得到的错误是

 Pet.java:9: invalid method
 declaration; return type required
 public getName(String name)
        ^ 1 error The output should have been:
     getName() works as expected
     setName() works

This is what was actually produced:
    Exception in thread "main" java.lang.NoClassDefFoundError: Pet

任何想法有什么问题吗?

5 个答案:

答案 0 :(得分:4)

您的方法签名都不正确:

    如你所提到的,
  • name是String,但你的mutator方法需要int,这意味着 integer 作为输入。将其切换为String,它应该可以工作。
  • 您的访问者实际上并不返回内部名称的值,而是返回给定的name参数。这是一个错误,因为访问器旨在返回( 的副本)类内部持有的值。它也缺少返回类型,它当然应该匹配字段的返回类型。

哦,只是为了澄清,方法签名表示方法的整个声明,基本上你编写的所有声明方法:

  • 名字很明显。
  • 返回值是方法签名的一部分,非常重要,因为它是强制性的。
  • 可见性( public / package / protected / private )也很重要,因为它定义了谁可以访问实际方法。
  • 参数当然是方法签名的一部分,因为即使方法的其他部分与名称完全相同,参数也可以使方法完全唯一。甚至零参数也被计为签名的一部分!

它被称为签名的原因当然是这四个一起组成了一个独特的组合,它作为方法的唯一标识符,你需要所有四个都有一个具有唯一签名的完全声明的方法。访问者/变异者的整个想法依赖于某种方法签名模式,使每个人都能以预定义的方式访问它们。

NoClassDefFoundError通常意味着类路径有问题,您需要将类实际添加到类路径中才能运行它。

答案 1 :(得分:3)

仔细阅读错误消息:“return type required public getName(String name)”。

答案 2 :(得分:2)

您的访问者应该是: public String getName(){return name; }

你的变种应该是: public void setName(String newName){name = newName; }

你的数据应该像这样保护

私人字符串名称;

答案 3 :(得分:0)

我的建议是关于所有的评论,在JAVA中使用一些IDE进行开发,例如Eclipse,IDE将明确地改善你的开发时间,并防止陷阱在一些基本的思考上这样做。

答案 4 :(得分:0)

阅读错误消息:return type required public getName(String name) 这意味着您需要该方法的返回类型。您需要在空白之后添加String,这样您才能拥有:

public String getName(String name)
{
    return name;
}

您还需要将setName方法中的int更改为String

您需要确保在代码的开头创建变量名称:

private String name;