I was looking at the example implementation of Publisher ([AsyncIterablePublisher.java](https://github.com/reactive-streams/reactive-streams-jvm/blob/v1.0.0/examples/src/main/java/org/reactivestreams/example/unicast/AsyncIterablePublisher.java)) of the reactive-streams spec when I stumbled into something that I don't understand why it was done that way.

```
static interface Signal {};
enum Cancel implements Signal { Instance; };
enum Subscribe implements Signal { Instance; };
enum Send implements Signal { Instance; };

```

Being realistic that I'm not such an advanced programmer as the person that wrote this I'm sure that there is a reason to do it that way. But I'm also not able to explain why it would be better than doing this (which is how I would have done it).

```
enum Signal {
  Cancel,
  Subscribe,
  Send;
}

```

Could someone explain it to me why it would be better? Advantages / disadvantages?