我有一个 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());
这样做的问题是,直到运行时我才能发现是否犯了错误。
有没有办法通过询问正在返回的对象类的消息来获取将来的泛型类型?
我可以在 C++ 中这样做:
class SomeMessageA {
public:
typedef int future_t;
};
SomeMessageA::future_t a;
我可以在 Java 中做类似的事情吗?或者我总是必须引用预期类型的文档?
最佳答案
最简单的方法是使 CompletableMessage
也变得通用,并指定其返回类型:
public interface CompletableMessage<T> {
...
然后继承特定的消息类型:
public class SomeMessageA implements CompletableMessage<Uuid> {
...
并匹配 getFuture()
方法的类型:
public <T> CompletableFuture<T> getFuture(CompletableMessage<T> message) {
...
关于java - 我可以问一个类它需要什么类型的泛型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837971/