获取和设置Java(新手程序员在这里)

时间:2014-02-27 09:36:17

标签: java setter getter

我正在尝试创建一个吉他程序。我有一个吉他放大器类,有一个声音对象,我试图在我的拾音器类中访问。我的目标是将我的拾音器类中的声音属性设置为与GuitarAmp类中的声音属性相同,这样我就可以设置我的弦乐的所有声音属性。我真的不确定如何做到这一点,我读过的关于Java中的获取和设置的文章一直没有帮助。我有下面列出的两个课程,任何有关获取和设置的帮助都将不胜感激。

public class GuitarAmp
{

    // This is what I want to get from this class
    public GuitarAmpSound sound;

    public GuitarAmp(GuitarAmpSound sound, int volume, int distortSetting) {
        sound = new GuitarAmpSound();
        sound.setVolume(64);
        sound.setDistortSetting(GuitarAmpSound.JAZZ);
    }

    public void changeVolume(int newVolume)
    {
        sound.setVolume(newVolume);
    }
}

这是皮卡类。

public class GuitarPickup {

    public GuitarAmpSound pickupSound;
    public void Connect(GuitarString strings[], GuitarAmp amp)
    {

        pickupSound = new GuitarAmpSound();

        //This is where I need to set it

        for(int i = 1; i <= 6; i++)
        {
        strings[i].setSound(pickupSound);
        }
    }


 }

4 个答案:

答案 0 :(得分:1)

您需要声明一个字段(属于某个类的特定实例的变量)来保存该对象的每条信息。 pickupSound上的GuitarPickup字段就是一个例子。

在Java中使用与getter和setter相同的名称是强有力的约定。例如,对于volume,代码的相关部分将如下所示:

public class GuitarAmpSound {
    private int sound = 0;

    public void setSound(int sound) {
        this.sound = sound; // "this.sound" means the sound field, not the parameter
    }

    public int getSound() {
        return sound; // or this.sound
    }
}

如果您要为for循环实施必要的代码,那么您的GuitarString类需要一个名为GuitarAmpSound的{​​{1}}字段以及相应的getter和setter

请注意,sound循环中的条件存在许多问题。 Java中的数组是从零开始的(因此6弦吉他上的字符串将从0到5),你不应该在循环中硬编码数组大小,而应该使用for。最后,如果您只想检索数组(或集合)中的每个元素,Java有一个更方便的语法:

strings.length

答案 1 :(得分:1)

您的代码毫无意义,请用此替换GuitarAmp类:

public class GuitarAmp {

   //This is what I want to get from this class
   private GuitarAmpSound sound;

   public GuitarAmp() {
      sound = new GuitarAmpSound();
      sound.setVolume(64);
      sound.setDistortSetting(GuitarAmpSound.JAZZ);
   }

   public void changeVolume(int newVolume){
      sound.setVolume(newVolume);
   }

   public GuitarAmpSound getSound() {
      return sound;
   }

   public void setSound(Sound sound) {
      this.sound = sound;
   }
}

获取并设置规则很简单:

public YourClassName getYourObjectName() {
   return yourObjectName;
}

public void setYourObjectName(YourClassName yourObjectName) {
   this.yourObjectName = yourObjectName;
}

答案 2 :(得分:0)

真的很复杂,了解你真正想要的东西。看看有些变化......但是 我认为你需要重新构建对象。你想干什么?你能更好地解释一下吗?

public class GuitarAmp {

//This is what I want to get from this class
public GuitarAmpSound sound;

--> the sound you pass before call the constructor
sound.setVoolume(x);
sound.setDistortSetting(Y)
so you pass the object sound with the attributes full of information


public GuitarAmp(GuitarAmpSound sound){

this.sound = sound;

}

public void changeVolume(int newVolume){
  this.sound.setVolume(newVolume);
}
}

这是皮卡类。

公共类GuitarPickup {

public GuitarAmpSound pickupSound;
public void Connect(GuitarString strings[], GuitarAmp amp)
{

    pickupSound = new GuitarAmpSound();

    //This is where I need to set it

   for(int i = 0; i<strings.length; i++)
    {
    amp.setSound(strings[i].getSound());
    }
}

}

答案 3 :(得分:0)

从概念上讲,为每个GuitarString保存相同的Sound值几乎没有意义。