class SO52915280 {
StringCommandBusRequest request = new StringCommandBusRequest();
CommandBus bus = new CommandBus();
String result
= bus.
execute(request
); }
public interface Bus<P, B extends Bus<P, B>> {
<R, Q extends BusRequest<R, P, B>> R execute(Q request);
}
public interface BusRequest<R, P, B extends Bus<P, B>> {
P getPayload();
}
public static class CommandBus implements Bus<CommandBusRequestPayload, CommandBus> {
@Override
public <R, Q extends BusRequest<R, CommandBusRequestPayload, CommandBus>> R execute(Q request) {
CommandBusRequestPayload payload = request.getPayload();
System.
out.
println("Got payload: " + payload
); return null;
}
}
public static abstract class CommandBusRequest<T> implements BusRequest<T, CommandBusRequestPayload, CommandBus> {
@Override
public CommandBusRequestPayload getPayload() {
return new CommandBusRequestPayload();
}
}
public static class CommandBusRequestPayload {}
public static class StringCommandBusRequest extends CommandBusRequest<String> {}
}
Y2xhc3MgU081MjkxNTI4MCB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBTdHJpbmdDb21tYW5kQnVzUmVxdWVzdCByZXF1ZXN0ID0gbmV3IFN0cmluZ0NvbW1hbmRCdXNSZXF1ZXN0KCk7CiAgICAgICAgQ29tbWFuZEJ1cyBidXMgPSBuZXcgQ29tbWFuZEJ1cygpOwogICAgICAgIFN0cmluZyByZXN1bHQgPSBidXMuZXhlY3V0ZShyZXF1ZXN0KTsKICAgIH0KCiAgICBwdWJsaWMgaW50ZXJmYWNlIEJ1czxQLCBCIGV4dGVuZHMgQnVzPFAsIEI+PiB7CiAgICAgICAgPFIsIFEgZXh0ZW5kcyBCdXNSZXF1ZXN0PFIsIFAsIEI+PiBSIGV4ZWN1dGUoUSByZXF1ZXN0KTsKICAgIH0KCiAgICBwdWJsaWMgaW50ZXJmYWNlIEJ1c1JlcXVlc3Q8UiwgUCwgQiBleHRlbmRzIEJ1czxQLCBCPj4gewogICAgCVAgZ2V0UGF5bG9hZCgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgY2xhc3MgQ29tbWFuZEJ1cyBpbXBsZW1lbnRzIEJ1czxDb21tYW5kQnVzUmVxdWVzdFBheWxvYWQsIENvbW1hbmRCdXM+IHsKICAgIAlAT3ZlcnJpZGUKICAgIAlwdWJsaWMgPFIsIFEgZXh0ZW5kcyBCdXNSZXF1ZXN0PFIsIENvbW1hbmRCdXNSZXF1ZXN0UGF5bG9hZCwgQ29tbWFuZEJ1cz4+IFIgZXhlY3V0ZShRIHJlcXVlc3QpIHsKICAgIAkJQ29tbWFuZEJ1c1JlcXVlc3RQYXlsb2FkIHBheWxvYWQgPSByZXF1ZXN0LmdldFBheWxvYWQoKTsKICAgIAkJU3lzdGVtLm91dC5wcmludGxuKCJHb3QgcGF5bG9hZDogIiArIHBheWxvYWQpOwogICAgCSAgICByZXR1cm4gbnVsbDsKICAgIAl9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBhYnN0cmFjdCBjbGFzcyBDb21tYW5kQnVzUmVxdWVzdDxUPiBpbXBsZW1lbnRzIEJ1c1JlcXVlc3Q8VCwgQ29tbWFuZEJ1c1JlcXVlc3RQYXlsb2FkLCBDb21tYW5kQnVzPiB7CiAgICAgICAgQE92ZXJyaWRlCiAgICAgICAgcHVibGljIENvbW1hbmRCdXNSZXF1ZXN0UGF5bG9hZCBnZXRQYXlsb2FkKCkgewogICAgICAgIAlyZXR1cm4gbmV3IENvbW1hbmRCdXNSZXF1ZXN0UGF5bG9hZCgpOwogICAgICAgIH0KICAgIH0KICAgIAogICAgcHVibGljIHN0YXRpYyBjbGFzcyBDb21tYW5kQnVzUmVxdWVzdFBheWxvYWQge30KCiAgICBwdWJsaWMgc3RhdGljIGNsYXNzIFN0cmluZ0NvbW1hbmRCdXNSZXF1ZXN0IGV4dGVuZHMgQ29tbWFuZEJ1c1JlcXVlc3Q8U3RyaW5nPiB7fQp9