java - 我可以问一个类它需要什么类型的泛型吗?

标签 java generics completable-future

我有一个 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/

相关文章:

java - Android - MediaPlayer 继续前进

java - 生成 Swagger API 的最佳方式?即 codegen 与 swagger 编辑器(Spring Boot API)

java - 比较字符串的数组列表和字符串

c# - 如何检查(通用)数字类型是 C# 中的整数类型还是非整数类型?

c# - 为什么不强制对泛型类型进行类约束?

java - CompletableFuture 的意外行为

java 使用可完成的 Future 发送异常

java - 根据登录用户在运行时更改数据库架构

java - 使用 2 个线程的更快输出

java - 为什么从接口(interface)执行方法时会将参数转换为 Object(或扩展 YourObject)?