Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改类中所有对象的字段_Java - Fatal编程技术网

Java 更改类中所有对象的字段

Java 更改类中所有对象的字段,java,Java,我有一个带有布尔字段的类,我希望同时只有一个对象的字段为true 我试图用静态方法设置所有对象的字段,但我无法从静态方法到达非静态字段。(我不知道静态方法背后的逻辑) 有什么诀窍可以做到这一点,或者我应该迭代类的所有对象来更改所有字段吗?我可以想到的一个诀窍是使用一个静态成员来保存一个具有true属性的实例的引用: public class MyClass { private static MyClass trueObject = null; public void setPr

我有一个带有布尔字段的类,我希望同时只有一个对象的字段为true

我试图用静态方法设置所有对象的字段,但我无法从静态方法到达非静态字段。(我不知道静态方法背后的逻辑)


有什么诀窍可以做到这一点,或者我应该迭代类的所有对象来更改所有字段吗?

我可以想到的一个诀窍是使用一个静态成员来保存一个具有true属性的实例的引用:

public class MyClass {
    private static MyClass trueObject = null;

    public void setProperty(boolean value) {
        if (value) {
            trueObject = this;
        } else {
            trueObject = null;
        }
    }

    public boolean getProperty() {
        return trueObject == this;
    }
}

当您希望创建具有
true
的实例并且已经创建了
true
时,这取决于您的需求

A.将所有其他设置为false,将新设置为true

public class ToggleBox {

    private static List<ToggleBox> listAll = new ArrayList<>();

    private boolean selected;

    public ToggleBox(boolean bool) {
        if (bool)                          // if require true
            for (ToggleBox mo : listAll)
                mo.setSelected(false);     // set all other to false

        listAll.add(this);
        this.selected = bool;
    }

    public void setSelected(boolean bool) { this.selected = bool; }

    @Override
    public String toString() {  return selected + "";  }

    public static void main(String argv[]) {
        ToggleBox m1 = new ToggleBox(true);
        ToggleBox m2 = new ToggleBox(false);
        System.out.println(Arrays.toString(listAll.toArray()));  // [true, false]
        ToggleBox m3 = new ToggleBox(true);
        System.out.println(Arrays.toString(listAll.toArray()));  // [false, false,true]
    }

}
public class ToggleBox {

    private static boolean alreadyTrue = false;

    private static List<ToggleBox> listAll = new ArrayList<>();

    private boolean selected;

    public ToggleBox(boolean bool) {
        if (bool) {                    // if require true
            if (alreadyTrue)           // if there is already one
                bool = false;          // it will be false
            else                       // else
                alreadyTrue = true;    // it's st to true, and remember it
        }

        this.selected = bool;
    }

    @Override
    public String toString() {  return selected + "";  }

    public static void main(String argv[]) {
        ToggleBox m1 = new ToggleBox(true);
        ToggleBox m2 = new ToggleBox(false);
        System.out.println(Arrays.toString(listAll.toArray()));  // [true, false]
        ToggleBox m3 = new ToggleBox(true);
        System.out.println(Arrays.toString(listAll.toArray()));  // [true, false, false]
    }

}
公共类切换框{
private static List listAll=new ArrayList();
选择私有布尔值;
公共切换框(布尔布尔布尔值){
if(bool)//如果需要true
用于(切换框mo:listAll)
mo.setSelected(false);//将所有其他设置为false
listAll.add(这个);
this.selected=bool;
}
public void setSelected(boolean bool){this.selected=bool;}
@凌驾
公共字符串toString(){返回选定的+“”;}
公共静态void main(字符串argv[]){
切换框m1=新切换框(真);
切换框m2=新切换框(假);
System.out.println(Arrays.toString(listAll.toArray());//[true,false]
切换框m3=新切换框(真);
System.out.println(Arrays.toString(listAll.toArray());//[false,false,true]
}
}
拒绝将新的设置为真

public class ToggleBox {

    private static List<ToggleBox> listAll = new ArrayList<>();

    private boolean selected;

    public ToggleBox(boolean bool) {
        if (bool)                          // if require true
            for (ToggleBox mo : listAll)
                mo.setSelected(false);     // set all other to false

        listAll.add(this);
        this.selected = bool;
    }

    public void setSelected(boolean bool) { this.selected = bool; }

    @Override
    public String toString() {  return selected + "";  }

    public static void main(String argv[]) {
        ToggleBox m1 = new ToggleBox(true);
        ToggleBox m2 = new ToggleBox(false);
        System.out.println(Arrays.toString(listAll.toArray()));  // [true, false]
        ToggleBox m3 = new ToggleBox(true);
        System.out.println(Arrays.toString(listAll.toArray()));  // [false, false,true]
    }

}
public class ToggleBox {

    private static boolean alreadyTrue = false;

    private static List<ToggleBox> listAll = new ArrayList<>();

    private boolean selected;

    public ToggleBox(boolean bool) {
        if (bool) {                    // if require true
            if (alreadyTrue)           // if there is already one
                bool = false;          // it will be false
            else                       // else
                alreadyTrue = true;    // it's st to true, and remember it
        }

        this.selected = bool;
    }

    @Override
    public String toString() {  return selected + "";  }

    public static void main(String argv[]) {
        ToggleBox m1 = new ToggleBox(true);
        ToggleBox m2 = new ToggleBox(false);
        System.out.println(Arrays.toString(listAll.toArray()));  // [true, false]
        ToggleBox m3 = new ToggleBox(true);
        System.out.println(Arrays.toString(listAll.toArray()));  // [true, false, false]
    }

}
公共类切换框{
私有静态布尔alreadyTrue=false;
private static List listAll=new ArrayList();
选择私有布尔值;
公共切换框(布尔布尔布尔值){
if(bool){//if需要true
if(alreadyTrue)//如果已经有了
bool=false;//它将是false
else//else
alreadyTrue=true;//这是千真万确的,记住它
}
this.selected=bool;
}
@凌驾
公共字符串toString(){返回选定的+“”;}
公共静态void main(字符串argv[]){
切换框m1=新切换框(真);
切换框m2=新切换框(假);
System.out.println(Arrays.toString(listAll.toArray());//[true,false]
切换框m3=新切换框(真);
System.out.println(Arrays.toString(listAll.toArray());//[真、假、假]
}
}

请共享一些代码,如类定义。您可以添加一个静态字段,该字段是当前设置为true的对象,并删除布尔值。