Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.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_Android_Generics - Fatal编程技术网

Java泛型不兼容类型

Java泛型不兼容类型,java,android,generics,Java,Android,Generics,我有两个扩展的抽象类和另一个使用它们的类: -----基地----- 有什么想法吗 事实上,这个电话 public <REQUEST_TYPE extends HttpRequest<RESPONSE_TYPE>, RESPONSE_TYPE extends HttpResponse<RESULT_TYPE>, RESULT_TYPE> void request(@NonNull final REQUEST_TYPE httpRequest, @Nullab

我有两个扩展的抽象类和另一个使用它们的类:

-----基地-----

有什么想法吗


事实上,这个电话

public <REQUEST_TYPE extends HttpRequest<RESPONSE_TYPE>, RESPONSE_TYPE extends HttpResponse<RESULT_TYPE>, RESULT_TYPE> void request(@NonNull final REQUEST_TYPE httpRequest, @Nullable final Object tag, @Nullable final Listener<REQUEST_TYPE, RESPONSE_TYPE> listener)
{...}
行吗


此处的完整代码

推理算法似乎无法推断
响应类型
。看起来这三个类型参数都应该由
MockyTextRequest
给出

我不太清楚为什么规范会出现这种情况,但它与“嵌套”有关

错误可通过以下方式再现:

// same error on this line
// C (String) is not inferred
m(new ArrayList<List<String>>());

// the compiler is able to infer B from A
// but not C from A
static <A extends List<B>, B extends List<C>, C> void m(A a) {}
然后:

class MockyTextRequest
extends HttpRequest<MockyTextResponse, TextWithTitle>

public <
    REQUEST_TYPE extends HttpRequest<RESPONSE_TYPE, RESULT_TYPE>,
    RESPONSE_TYPE extends HttpResponse<RESULT_TYPE>,
    RESULT_TYPE
> RESPONSE_TYPE synchronicRequest(
    final REQUEST_TYPE httpRequest, final Object tag)
类MockyTextRequest
扩展HttpRequest
公开的<
请求类型扩展了HttpRequest,
响应类型扩展了HttpResponse,
结果类型
>响应类型同步请求(
最终请求(类型httpRequest,最终对象标记)
但这可能会使您的一些代码更加冗长


作为旁注,您应该在可能的情况下:

//                                                  vvv
class HttpRequest<RESPONSE_TYPE extends HttpResponse<?>>
//vvv

类HttpRequest实际上是否需要
结果类型
内部
同步请求
?顺便说一句,你编译的是什么版本的Java?它是Java7。我确实在函数中使用了RESULT_类型来避免castWell,我可能会想出一个聪明的解决方案,但我会说不要屏住呼吸。这看起来像是一个推理错误,Java 7充斥着这样的小东西。好吧,使用“…RESPONSE\u TYPE extensed HttpResponse…”代替它是可行的,但迫使我在主体内部强制转换一些变量。奇怪的是,另一个几乎相同的函数也可以工作(参见我的编辑)是的,编辑中的一个可以工作,因为可以从参数推断出
RESULT\u TYPE
。请参阅我关于嵌套的介绍注释。它的名称为int,几乎与“HttpClient.get().request(new MockyTextRequest(),main activity.this);”的方式完全相同,但您正在将一个
侦听器
传递给该方法,其中
请求类型
不是“嵌套”在另一个推断类型中。
public <REQUEST_TYPE extends HttpRequest<RESPONSE_TYPE>, RESPONSE_TYPE extends HttpResponse<RESULT_TYPE>, RESULT_TYPE> void request(@NonNull final REQUEST_TYPE httpRequest, @Nullable final Object tag, @Nullable final Listener<REQUEST_TYPE, RESPONSE_TYPE> listener)
{...}
HttpClient.get().request(new MockyTextRequest(), MainActivity.this);
// same error on this line
// C (String) is not inferred
m(new ArrayList<List<String>>());

// the compiler is able to infer B from A
// but not C from A
static <A extends List<B>, B extends List<C>, C> void m(A a) {}
MockyTextResponse httpResponse =
    HttpClient.get().
        <MockyTextRequest, MockyTextResponse, TextWithTitle>
        synchronicRequest(new MockyTextRequest(), null);
public <
    RESPONSE_TYPE extends HttpResponse<RESULT_TYPE>,
    RESULT_TYPE
> RESPONSE_TYPE synchronicRequest(
    final HttpRequest<RESPONSE_TYPE> httpRequest, final Object tag)
public <
    REQUEST_TYPE extends HttpRequest<RESPONSE_TYPE>,
    RESPONSE_TYPE extends HttpResponse<?>
> RESPONSE_TYPE synchronicRequest(
    final REQUEST_TYPE httpRequest, final Object tag)
public <
    REQUEST_TYPE extends HttpRequest<RESPONSE_TYPE>,
    RESPONSE_TYPE extends HttpResponse<? extends RESULT_TYPE>,
    RESULT_TYPE
> RESPONSE_TYPE synchronicRequest(
    final REQUEST_TYPE httpRequest, final Object tag)
class HttpRequest<
    RESPONSE_TYPE extends HttpResponse<RESULT_TYPE>,
    RESULT_TYPE
>
class MockyTextRequest
extends HttpRequest<MockyTextResponse, TextWithTitle>

public <
    REQUEST_TYPE extends HttpRequest<RESPONSE_TYPE, RESULT_TYPE>,
    RESPONSE_TYPE extends HttpResponse<RESULT_TYPE>,
    RESULT_TYPE
> RESPONSE_TYPE synchronicRequest(
    final REQUEST_TYPE httpRequest, final Object tag)
//                                                  vvv
class HttpRequest<RESPONSE_TYPE extends HttpResponse<?>>