Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法返回对象,而不是泛型方法中显式转换的类型_Java_Generics - Fatal编程技术网

Java 方法返回对象,而不是泛型方法中显式转换的类型

Java 方法返回对象,而不是泛型方法中显式转换的类型,java,generics,Java,Generics,我试图了解java的泛型。而且似乎很难实现我想要的 我想做一个通用的任务聚合器。这意味着,给定一个请求列表,我需要通过某个处理程序(根据请求从工厂获得)处理每个请求。并返回响应列表。现在为了加快进程,我想通过并行执行处理程序来获得结果 首先,我定义了一个接口THandler: interface THandler<Request, Response> { Response handle(Request request); } workers.add(new TWor

我试图了解java的泛型。而且似乎很难实现我想要的

我想做一个通用的任务聚合器。这意味着,给定一个请求列表,我需要通过某个处理程序(根据请求从工厂获得)处理每个请求。并返回响应列表。现在为了加快进程,我想通过并行执行处理程序来获得结果

首先,我定义了一个接口
THandler

interface THandler<Request, Response> {
        Response handle(Request request);
}
workers.add(new TWork<Request, Response>(FactoryHandler.<Request, Response>getHandler(r), r, allDone));
最后是
getHandler()
FactoryHandler
。我尝试显式地将返回值强制转换为
THandler
,但是,在编译时它仍然显示为
THandler

interface THandler<Request, Response> {
        Response handle(Request request);
}
workers.add(new TWork<Request, Response>(FactoryHandler.<Request, Response>getHandler(r), r, allDone));
仅定义“Request”的类型,由“req”的类型隐式定义。 响应没有被定义,因此被预测为对象,以使它与所有事物一起工作

最简单的解决方案是调用“getHandler()”,如下所示:

FactoryHandler.<Request, Response>getHandler(req);
FactoryHandler.getHandler(req);
它显式定义了泛型类型

仅定义“Request”的类型,由“req”的类型隐式定义。 响应没有被定义,因此被预测为对象,以使它与所有事物一起工作

最简单的解决方案是调用“getHandler()”,如下所示:

FactoryHandler.<Request, Response>getHandler(req);
FactoryHandler.getHandler(req);

它明确定义了泛型类型。

尝试了此操作。仍在获取:
构造函数网络(THandler、Request、CountDownLatch)未定义
。不过还是要感谢.workers.add(新的网络(getHandler(r),r,allDone));应该有相同的解决方案,也就是在“getHandler()”之前添加“”,如果我跳过调用静态方法
getHandler()
直接调用
FactoryHandler.getHandler(req),它就会起作用。你能更新我如何使静态方法工作吗?跳过调用是什么意思?尝试了这个。仍在获取:
构造函数网络(THandler、Request、CountDownLatch)未定义
。不过还是要感谢.workers.add(新的网络(getHandler(r),r,allDone));应该有相同的解决方案,也就是在“getHandler()”之前添加“”,如果我跳过调用静态方法
getHandler()
直接调用
FactoryHandler.getHandler(req),它就会起作用。您可以更新如何使静态方法工作吗?跳过调用是什么意思?如果您知道类(请求和响应),则不需要通用实现。泛型仅在您不希望硬编码类型并希望拦截多个实现类型时有用。FactoryHandler.getHandler的定义不正确。静置后取出keyword@JugalPanchal:请求和响应不是类。它们是泛型类型。我这样给它们命名是为了让它更有趣meaningful@rebelizant我不希望FactoryHandler是泛型类型。出于同样的原因,我提供了一个静态泛型方法。删除
后,它会给我带来编译错误。你能详细说明一下你的意思吗?不要把泛型参数命名为类;遵循使用单个大写字母的惯例。如果你知道类(请求和响应),那么你就不需要泛型实现。泛型仅在您不希望硬编码类型并希望拦截多个实现类型时有用。FactoryHandler.getHandler的定义不正确。静置后取出keyword@JugalPanchal:请求和响应不是类。它们是泛型类型。我这样给它们命名是为了让它更有趣meaningful@rebelizant我不希望FactoryHandler是泛型类型。出于同样的原因,我提供了一个静态泛型方法。删除
后,它会给我带来编译错误。你能详细说明一下你的意思吗?不要把泛型参数命名为类;遵循使用单个大写字母的惯例。你做这件事的方式让人很困惑。
FactoryHandler.<Request, Response>getHandler(req);