Camandros
Camandros

Reputation: 459

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?

Upvotes: 0

Views: 95

Answers (2)

Markus Malkusch
Markus Malkusch

Reputation: 7878

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)

Upvotes: 0

AmanSinghal
AmanSinghal

Reputation: 2494

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.

Upvotes: 4

Related Questions