在java的构造函数中自我赋值

时间:2017-03-11 08:48:50

标签: java

我有一个这样的课程:

public class Reza {
    public Reza(Reza reza) {

    }
}

我想将构造函数的输入参数的reza替换为当前对象:

this = reza

我该怎么办? 有可能吗?

3 个答案:

答案 0 :(得分:3)

不,这是不可能的。 thisreza代表不同的对象;你不能用现有的构造函数替换在构造函数中创建的对象。

但是,您可以将<{1}}的内容复制reza。为此,添加一系列分配如下:

this

答案 1 :(得分:1)

不可能,但您可以逐个复制所有属性(如其他答案)或反射。 这样的东西,希望你有你想要复制的属性的getter和setter(我从另一个stackoverflow答案复制它,看起来是正确的):

public Reza(Reza reza) {
    Method[] gettersAndSetters = reza.getClass().getMethods();

    for (int i = 0; i < gettersAndSetters.length; i++) {
            String methodName = gettersAndSetters[i].getName();
            try{
              if(methodName.startsWith("get")){
                 this.getClass().getMethod(methodName.replaceFirst("get", "set") , gettersAndSetters[i].getReturnType() ).invoke(this, gettersAndSetters[i].invoke(reza, null));
                    }else if(methodName.startsWith("is") ){
                        this.getClass().getMethod(methodName.replaceFirst("is", "set") ,  gettersAndSetters[i].getReturnType()  ).invoke(this, gettersAndSetters[i].invoke(reza, null));
                    }

            }catch (NoSuchMethodException e) {
                // TODO: handle exception
            }catch (IllegalArgumentException e) {
                // TODO: handle exception
            }

    }
}

答案 2 :(得分:0)

不,你不能这样做。根据设计,this是一个只读常量。分配给它没有任何意义。