将当前实例设置为同一对象的不同实例
问题描述:
在类的实例方法中是否有任何方式来更改当前实例指向的内容?将当前实例设置为同一对象的不同实例
这是我试过到目前为止:
public class Test {
String name;
Test other;
public Test(String name) {
this.name = name;
}
public void setOther(Test test) {
this.other = test;
}
public void printName(){
System.out.println(this.name);
}
public void testMeOut(){
changeInstance(this, other);
printName();
}
public static void changeInstance(Test instance1, Test instance2) {
instance1 = instance2;
}
}
和我用于测试的测试类类:
public class TestingTest {
public static void main(String[] args) {
Test test1 = new Test("Test1");
test1.setOther(new Test("test2"));
test1.testMeOut();
test1.printName();
}
}
我预计输出为“测试2”,但麻烦printName()方法打印出“测试1”
由于被传入的对象是通过引用不应该第一个实例成为第二个实例吗?有没有什么办法可以做到这一点?
答
在Java中你无法做到这一点。一个实例就是它的实例,它有时称为身份。如果你能解释你为什么要这样做的原因,那么肯定有其他方法可以获得你之后的功能。例如,一个对象将其方法调用委托给其他对象当然是可能的和正常的。
里面你changeInstance
方法引用instance1
和instance2
是本地唯一的那个方法,所以把一个新的参考到instance1
有方法以外没有影响。
一个例子:
public class Test {
String name;
/** delegate */
Test other = null;
public Test(String name) {
this.name = name;
}
public void setOther(Test test) {
this.other = test;
}
public void printName(){
if (other == null) { // no delegate, do my own work
System.out.println(this.name);
} else {
// delegate to other
other.printName();
}
}
}
现在,如果你改变你的主要方法:
public static void main(String[] args) {
Test test1 = new Test("Test1");
test1.printName();
test1.setOther(new Test("test2"));
test1.printName();
}
它将打印:
Test1
test2
为什么downvotes? – yitzih
你认为'this.other = test;'是做什么的?你为什么这么认为?请也澄清你的想法_因为传入的对象是通过引用_手段。另外,你认为实例成为另一个实例是什么意思。基本上,这很有意义,这就是为什么你收到降价。 –
你并没有真正改变实例。您只需将数据成员设置为另一个实例即可。当你调用你的更改实例方法时,名称不会改变 – Li357