Image

Imaged_m_ wrote in Imageru_java

Изучая MIDP 2.0...

Изучая исходники MIDP 2.0, обнаружил странную вещь:

Фрагмент абстрактного класса javax.microedition.lcdui.Canvas:
    /**
     * Used by GameCanvas to suppress Game action key events
     */
    private boolean suppressKeyEvents; // = false

Никаких методов доступа к suppressKeyEvents в классе Canvas не предусмотрено.

Зато вот что есть в его потомке - классе javax.microedition.lcdui.game.GameCanvas:
    /**
     * Set a private field in the Canvas object. We use a
     * native method to work around the package boundary.
     * @param c this GameCanvas cast to a Canvas
     * @param suppressKeyEvents whether or not to suppress key events
     */
    private native void setSuppressKeyEvents(Canvas c, 
					     boolean suppressKeyEvents);

То есть вместо того, чтобы объявить suppressKeyEvents protected или public, они пишут native method, умеющий в обход ограничений залезать в приватное поле! Но зачем??