3 回答
TA贡献1752条经验 获得超4个赞
getters让我尝试向您解释和的概念setters。
您的班级Song有一些private数据字段。这意味着它们对外界隐藏。现在,如果此类之外的任何实体需要使用这些字段,则必须执行额外的步骤。此步骤可以是一个getter或一个setter方法。
getter 方法帮助实体从这些字段获取(或检索)值。setter 方法有助于为这些字段设置(或分配)值。
请记住,getter 和 setter 是从字段获取/设置字段,而不是整个类。这就是为什么存在以下问题:
public String getyearReleased() {
return Song;
}
在上面的代码中,你首先说你想String从getyearReleased()方法中返回 a,但是你看到你实际上返回的是Song,它是一个类。
main()这是一个包含 2 个字段的类的简单示例,以及如何通过外部类中的方法获取/设置它们。
public class Song {
private String songName;
private int yearReleased;
// Getter method for Song Name
public String getSongName() {
System.out.println("Getting the song name.");
return songName;
}
// Getter method for Year of Release
public int getYearReleased() {
System.out.println("Getting the year of release.");
return yearReleased;
}
// Setter method for Song Name
public void setSongName(String mySong) {
System.out.println("Setting the song name.");
this.songName = mySong;
}
// Setter method for Year of Release
public void setYearReleased(int mySongYear) {
System.out.println("Setting the year of release.");
this.yearReleased = mySongYear;
}
}
您应该注意,设置器不会返回任何内容,因为它们只是设置值。但 getter返回与正在检索的字段相同的数据类型。
您可以在该类中调用 getter 和 setter 方法。该类将包含以下main()方法:
public class SongDemo {
public static void main(String[] args) {
Song demoSong = new Song();
// call the setters
demoSong.setSongName("Summer of 69");
demoSong.setYearReleased(1988);
// call the getters and print the values returned
System.out.println(demoSong.getSongName());
System.out.println(demoSong.getYearReleased());
}
}
您的输出如下所示:
Setting the song name.
Setting the year of release.
Getting the song name.
Summer of 69
Getting the year of release.
1988
希望能帮助到你。
TA贡献1859条经验 获得超6个赞
应遵循普遍接受的约定 - 它使阅读代码更容易。
所有变量名称都应以小写字母开头。例子:
private String Maker;
应该
private String maker;
Getters / Setters 应该以驼峰式命名,以 get/set 开头。这使其成为所谓的 POJO(普通旧 java 对象)。许多库需要 getter/setter 的这种命名才能正常工作。例子:
public String getyearReleased()
应该
public int getYearReleased() {
return yearReleased;
}
getter 应该只返回与 getter 方法名称匹配的变量。你的一些吸气剂正在返回其他东西。不要这样做。
将分钟转换为秒。请注意以驼峰式命名该方法的方式。
public long convertMinToSecond(long minutes) {
return minutes * 60;
}
TA贡献1155条经验 获得超0个赞
好吧,不要不知所措,从头开始:
第一个“规则”:所有变量都应该从小 maker而不是开始Maker。喜欢yearReleased。这被称为驼峰命名法,因为这些单词看起来像骆驼一样有“驼峰” - 但你见过骆驼以驼峰开头吗?
这引出了第二条“规则”:类名以大写字母开头,如String或Song。
还有第一个错字:
public string getyearReleased(){ // it should say String not string
return yearReleased;
}
为了绝对连贯,因为你的变量被称为yearReleased你的方法应该尊重变量的书写并被调用getYearReleased。
现在,您的代码中出现了两次此方法:第一次出现表明return Song;哪个没有意义。(你想要的是“年份”而不是“歌曲”)。但由于出现了第二次,您可以删除该次。
所以你有了 的“getter” yearReleased,现在你需要一个“setter”
public void setYearReleased(int yearReleased){
this.yearReleased=yearReleased;
}
看看这和你的构造函数中的一模一样吗?您为该方法提供一个名为“yearReleased”的变量,它将将该值分配给“全局变量” this.yearReleased。您已将值设置为您的对象。
基本上 getter/setter 是这样的:
private String maker; // your global field / variable / member ... whatever you want to call it
/** the getter */
public String getMaker(){ //fyi because you are taping two words together the second one gets a capital letter.
return this.maker;
}
/** the setter */
public void setMaker(String maker){
this.maker = maker;
}
设置器也将与
public void setMaker(String theMakerOfThisAwesomeSong){
this.maker = theMakerOfThisAwesomeSong;
}
相同的结果。
一旦你编写了所有的 getter 和 setter - 通常这是为所有字段完成的,例如maker, name, length, type, yearReleased- 然后你可以修复你的构造函数:
public Song(String maker, String name, int length, String type, int yearReleased){ // you forgot to include the yearReleased
...
}
最后但并非最不重要的一点是方法convertMinToSec。我想它应该length在几秒钟内转换歌曲的,这基本上就像length*60.
不要问我这种方法的必要性——你就可以这样做:
public int convertMinToSec(){
return // calculate how many seconds the song lasts
}
就是这样。很抱歉,如果这篇文章太长了,但我希望它能对你有所帮助。
添加回答
举报