Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- abstract class Event {
- KeyPress extends Event { ... }
- KeyRelease extends Event { ... }
- KeyHold extends Event { ... }
- // ...
- }
- abstract class AbstractListener {
- Set<Class<? extends Event>> eventTypes;
- protected abstract boolean respond(Event event);
- }
- class DownKeyListener exteneds AbstractListener {
- DownKeyListener () {
- // just prepares to register to receive these events. doesn't matter how exactly.
- eventTypes.add(KeyPress.class);
- eventTypes.add(KeyHold.class);
- //no KeyRelease e.g.
- }
- boolean respond(Event event) {
- if (event instanceof KeyPress)
- return handleKeyPress(event);
- else if (event instanceof KeyHold)
- return handleKeyHold(event);
- return false;
- }
- private boolean handleKeyPress(KeyPress e) { ... }
- private boolean handleKeyHold(KeyHold e) { ... }
- }
- abstract class AbstractListener {
- Map<Class<? extends Event>, Function<? extends Event, Boolean> map = new ...
- // ^ doesn't ensure these event ^: are the same but at least
- // that someone responds
- // to ensure same event i can do
- protected <T extends Event> void register(Class<T> event, Function<T, Boolean> function) {
- map.put(event, function);
- }
- protected abstract boolean respond(Event event);
- }
- class DownKeyListener exteneds AbstractListener {
- DownKeyListener () {
- Map.put(KeyPress.class, keyPressFunction);
- Map.put(KeyHold.class, keyHoldFunction);
- }
- boolean respond(Event event) {
- Function<? extends Event, Boolean> f = map.get(event.getClass());
- return f == null ? false : f.apply(event);
- }
- Function<KeyPress, Boolean> keyPressFunction = event -> ...;
- Function<KeyHold, Boolean> keyHoldFunction = event -> ...;
- }
- The method apply(capture#4-of ? extends Event) in the type Function<capture#4-of ? extends Event,Boolean> is not applicable for the arguments (capture#5-of ? extends Event)
- The method apply(capture#3-of ? extends Event) in the type Function<capture#3-of ? extends Event,Boolean> is not applicable for the arguments (T)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement