0

我有方法printB()

private static final void printB () {
    System.out.println(Boolean.TRUE); 
    System.out.println(Boolean.FALSE);     
}

我有课

public class ChangeBooleanValue {
    public static void main(String[] args) {
        // Add code
        printB();      
    }


    private static final void printB () {
        System.out.println(Boolean.TRUE);     
        System.out.println(Boolean.FALSE); 
    } 
}

我想编写 instread 的代码,// Add Code以便输出为:

true 
true

或者

false
false

我知道通过一些 Java 技巧可以使用它。

4

4 回答 4

2

您可以执行以下操作:

System.out.println(true);
System.out.println(true);
System.exit(0);

你也可以做同样的事情false


完整的代码如下所示:

public class ChangeBooleanValue {
    public static void main(String[] args) {
        System.out.println(true);  // <--
        System.out.println(true);  // <--
        System.exit(0);            // <--
        printB();      
    }


    private static final void printB() {
        System.out.println(Boolean.TRUE);     
        System.out.println(Boolean.FALSE); 
    } 
}
于 2013-09-02T13:04:19.727 回答
1

您可以使用反射来更改Boolean.TRUE = Boolean.FALSE或反之亦然。并不是说这样做有合理的理由。

另一种方法是编译你自己版本的布尔类并用它来做你想做的任何事情,同样一点也不理智。

于 2013-09-02T13:06:35.920 回答
1

The code from OliverS:

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;

public class ChangeBooleanValue {
    public static void main(String[] args) {
        // Add code
        try {
            Field f = Boolean.class.getField("FALSE");
            f.setAccessible(true);

            Field modifiersField = Field.class.getDeclaredField("modifiers");
            modifiersField.setAccessible(true);
            modifiersField.setInt(f, (f.getModifiers() & ~Modifier.FINAL));
            f.set(null, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
        printB();
    }

    private static final void printB() {
        System.out.println(Boolean.TRUE);
        System.out.println(Boolean.FALSE);
    }
}

Output:

true
true
于 2013-09-02T18:40:05.070 回答
1

您使用反射来删除最终修饰符并将 Boolean.FALSE 替换为 true。

在这个答案中描述:https ://stackoverflow.com/a/3301720/131773

import java.lang.reflect.*;

public class EverythingIsTrue {
   static void setFinalStatic(Field field, Object newValue) throws Exception {
      field.setAccessible(true);

      Field modifiersField = Field.class.getDeclaredField("modifiers");
      modifiersField.setAccessible(true);
      modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);

      field.set(null, newValue);
   }
   public static void main(String args[]) throws Exception {      
      setFinalStatic(Boolean.class.getField("FALSE"), true);

      System.out.format("Everything is %s", false); // "Everything is true"
   }
}
于 2013-09-02T15:35:07.330 回答