import java.lang.reflect.*;

class Scratch {
    static class Example {
        final double isFinal = 1.1;
        double isNotFinal = 2.2;
    }
    static Example example = new Example();

    public static void main(String[] args) throws Exception {
        final Field isNotFinalField = example.getClass().getDeclaredField("isNotFinal");
        isNotFinalField.setAccessible(true);
        isNotFinalField.set(example, 9.9);

        final Field isFinalField = example.getClass().getDeclaredField("isFinal");
        isFinalField.setAccessible(true);
        isFinalField.set(example, 9.9); // SHOULD THROW

        System.out.println("isFinal: " + example.isFinal);
        System.out.println("isNotFinal: " + example.isNotFinal);
    }

    void preventIntellijFromSettingTheVariableFinal() {
        // Ignore me, I don't get executed
        example.isNotFinal = 2.2;
    }
}

