我有一个小问题因为我不明白的话题。类中有一个变量。在第一种方法中,我想给她一个价值。第二种方法必须再次更改此变量的值。第三种方法需要变量的新值。我想在类的每个点上更改并使用此变量。这可能吗?我希望你知道我的意思。谢谢你的帮助!
答案 0 :(得分:2)
有可能。
public class Test{
int counter;
public void initCounter(int initValue){
counter = initValue;
}
public void incCounter(){
counter++;
}
public void decCounter(){
counter--;
}
public void printCounter(){
System.out.println(counter);
}
}
答案 1 :(得分:0)
如果我理解正确,您需要将变量发送到方法中,以便他们可以修改它。据我了解,这里可能很难,因为如果你使用包装类型,它们就无法修改。在这种情况下,您可以创建一个包装变量的类,并可以更改它的值,或者您可以使用第三方库中的现成解决方案。
例如,在apache-comons中,他们有一个包:
org.apache.commons.lang3.mutable
包含所有原始类型的可变包装器(例如MutableInt)。 使用您自己的包装器或此类,您可以修改方法内的变量并保持结果,而无需从这些方法返回新值。
答案 2 :(得分:0)
你可以这里做一个例子:
public class PassingV {
private int i;
public int getI() {
return i;
}
public void setI(int i) {
this.i = i;
}
public PassingV firsM(PassingV a){
a.setI(1);
return a;
}
public PassingV secondM(PassingV a){
a.setI(2);
return a;
}
public PassingV thirdM(PassingV a){
a.setI(3);
return a;
}
@Override
public String toString() {
return "PassingV [i=" + i + "]";
}
public static void main(String[] args) {
// TODO Auto-generated method stub
PassingV v = new PassingV();
System.out.println(v.firsM(v).toString());
System.out.println(v.secondM(v).toString());
System.out.println(v.thirdM(v).toString());
}
}
<强>结果:强>
适用于您正在使用的对象类型,并且在您定义或未在类中定义的方法(例如访问器)方面很有用。
它们可以彻底改变你的物体从外面看到的方式。
让我们修改一下我们的课程,让我们看看会发生什么。
现在我将使用字符串参数代替 int 。
public class PassingV {
private String i;
public String getI() {
return i;
}
public void setI(String i) {
this.i = i;
}
public PassingV firsM(PassingV a){
a.setI("HEY ");
//substring but it return the original value :D
System.out.println(a.getI().substring(2));
return a;
}
public PassingV secondM(PassingV a){
a.setI("JOE ");
return a;
}
public PassingV thirdM(PassingV a){
a.setI("LETS GO");
return a;
}
@Override
public String toString() {
return this.getI() ;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
PassingV v = new PassingV();
System.out.println(v.firsM(v).toString());
System.out.println(v.secondM(v).toString());
System.out.println(v.thirdM(v).toString());
}
}
<强>结果:强>
正如您所看到的那样, String 对象发生了一些变化,因为它发生了 不可变对象
点击此链接,您可以阅读有关Immutable Objects
的更多信息