将当前实例设置为同一对象的不同实例

问题描述:

在类的实例方法中是否有任何方式来更改当前实例指向的内容?将当前实例设置为同一对象的不同实例

这是我试过到目前为止:

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”

由于被传入的对象是通过引用不应该第一个实例成为第二个实例吗?有没有什么办法可以做到这一点?

+1

为什么downvotes? – yitzih

+0

你认为'this.other = test;'是做什么的?你为什么这么认为?请也澄清你的想法_因为传入的对象是通过引用_手段。另外,你认为实例成为另一个实例是什么意思。基本上,这很有意义,这就是为什么你收到降价。 –

+0

你并没有真正改变实例。您只需将数据成员设置为另一个实例即可。当你调用你的更改实例方法时,名称不会改变 – Li357

在Java中你无法做到这一点。一个实例就是它的实例,它有时称为身份。如果你能解释你为什么要这样做的原因,那么肯定有其他方法可以获得你之后的功能。例如,一个对象将其方法调用委托给其他对象当然是可能的和正常的。

里面你changeInstance方法引用instance1instance2是本地唯一的那个方法,所以把一个新的参考到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