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