class GenericMessage extends BaseMessage<T> {

    @Override
    protected Message<T> withMetaData(MetaData metaData) {
        return new GenericMessage<>(this, metaData);
    }

    public  GenericMessage(T payload);
    public  GenericMessage(String id, T payload);
    public  GenericMessage(T payload, Map<String, ?> metaData);
    public  GenericMessage(String id, T payload, Map<String, ?> metaData);
    public  GenericMessage(GenericMessage<T> original, MetaData metaData);

}