简体   繁体   中英

Java: what is the purpose of having a class inside an interface

A friend of mine is writing some Java code and we exchange some thoughts on his issues (he is using quite the messed up framework).

One of his issues was solved by placing an enumerate inside a private class inside an interface. When he told me this I got quite the headache. He said it's a way of having an enumerate inside an interface . I always thought interfaces were exclusively to expose an interface and nothing more.

Why is it possible to place classes inside interfaces, and what purpose may it serve?

We can have classes inside interfaces. One example of its usage can be:

public interface Input
{
    public static class KeyEvent {
         public static final int KEY_DOWN = 0;
         public static final int KEY_UP = 1;
         public int type;
         public int keyCode;
         public char keyChar;
    }
    public static class TouchEvent {
         public static final int TOUCH_DOWN = 0;
         public static final int TOUCH_UP = 1;
         public static final int TOUCH_DRAGGED = 2;
         public int type;
         public int x, y;
         public int pointer;
    }
    public boolean isKeyPressed(int keyCode);
    public boolean isTouchDown(int pointer);
    public int getTouchX(int pointer);
    public int getTouchY(int pointer);
    public float getAccelX();
    public float getAccelY();
    public float getAccelZ();
    public List<KeyEvent> getKeyEvents();
    public List<TouchEvent> getTouchEvents();
}

Here the code has two nested classes which are for encapsulating information about event objects which are later used in method definitions like getKeyEvents(). Having them inside the Input interface improves cohesion.

Why is it possible?

Let me answer this by referring to 9.1.4. Interface Body and Member Declarations :

The body of an interface may declare [..] classes (§9.5)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM