Skip to content

Instantly share code, notes, and snippets.

@Garciat
Created April 11, 2018 20:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Garciat/f5834776685658a183e19828f7a35875 to your computer and use it in GitHub Desktop.
Save Garciat/f5834776685658a183e19828f7a35875 to your computer and use it in GitHub Desktop.
package com.company;
import java.util.Optional;
import java.util.function.Function;
class Validity { }
class Valid extends Validity { }
class Invalid extends Validity { }
class EventDescription<TValid extends Validity> {
private final String data;
private EventDescription(String data) {
this.data = data;
}
public String get() {
return data;
}
public EventDescription<Invalid> map(Function<String, String> mapper) {
return new EventDescription<>(mapper.apply(data));
}
public Optional<EventDescription<Valid>> validate() {
if (this.data.contains("<script>")) {
return Optional.empty();
} else {
return Optional.of(new EventDescription<>(this.data));
}
}
public static EventDescription<Invalid> create(String data) {
return new EventDescription<>(data);
}
}
class EventAPI {
public static void createEvent(EventDescription<Valid> description) {
// value is guaranteed to be valid
String value = description.get();
}
}
public class Main {
public static void main(String[] args) {
EventDescription<Invalid> description = EventDescription.create("hello");
description.validate().ifPresent(EventAPI::createEvent);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment