我可以问 class 泛型需要什么类型吗?

Can I ask a class what type it needs for a generic?

我有一个 CompletableFuture,其类型取决于消息返回的结果:

public <T> CompletableFuture<T> getFuture(
    CompletableMessage message)
{
    ..
}

一些消息的示例:

public class SomeMessageA implements CompletableMessage {
    .. // Future is UUID
}

public class SomeMessageB implements CompletableMessage {
    .. // Future is String
}

public class SomeMessageC implements CompletableMessage {
    .. // Future is Integer
}

我已经可以明确指定泛型了:

CompletableFuture<UUID> a = getFuture(new SomeMessageA());
CompletableFuture<String> b = getFuture(new SomeMessageB());
CompletableFuture<Integer> c = getFuture(new SomeMessageC());

这样做的问题是,我直到运行时才发现是否有错误。

有没有办法通过询问正在返回对象 class 的消息来为将来获取通用类型?

我可以在 C++ 中这样做:

class SomeMessageA {
public:
    typedef int future_t;
};

SomeMessageA::future_t a;

我可以在 Java 中做类似的事情吗?还是我总是必须参考预期类型的​​文档?

最简单的方法是也使 CompletableMessage 通用,指定其 return 类型:

public interface CompletableMessage<T> {
...

然后继承特定类型的消息:

public class SomeMessageA implements CompletableMessage<Uuid> {
...

并匹配 getFuture() 方法的类型:

public <T> CompletableFuture<T> getFuture(CompletableMessage<T> message) {
...