gpt4 book ai didi

java - 使用泛型类的内部类

转载 作者:可可西里 更新时间:2023-11-01 15:29:39 26 4
gpt4 key购买 nike

这是一个通用的 Java 问题,尽管由于对 Hadoop 2.6 的依赖,它特别让我感到痛苦。

我尝试使用的外部代码如下所示:

package org.apache.hadoop.mapreduce;

public class Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {

public abstract class Context
implements ReduceContext<KEYIN,VALUEIN,KEYOUT,VALUEOUT> {
}
}

我自己的代码看起来像

import org.apache.hadoop.mapreduce.Reducer.Context;

public class MyReducerTest {

@Mock
private Context context;
}

我收到此代码的编译器警告,我似乎无法摆脱它,除非抑制它。

Reducer.Context is a raw type. References to generic type
Reducer<KEYIN,VALUEIN,KEYOUT,VALUEOUT>.Context should be parameterized

每次我试图找出要做什么时,答案似乎都围绕着改变嵌套类的结构以不同地使用类参数。但是更改 Hadoop 的代码不是一个选项(由于团队限制,从 2.6 升级也不是)。

我试过了

import org.apache.hadoop.mapreduce.Reducer<?,?,?,?>.Context;

public class MyReducerTest {    
@Mock
private Context<?,?,?,?> context;
}

但那些会导致编译器错误。我可以抑制警告或只是尝试忽略它,但这些选项出于各自的原因都是不好的。

那么 Java 要我在这里做什么呢?

最佳答案

您的Context 类是一个内部类。因此,任何 Context 值都与其封闭类型 Reducer 的实例相关。该关系包括泛型类型参数。

非原始类型表达式是

@Mock
private Reducer<?, ?, ?, ?>.Context context;

但是您可能应该适本地对其进行参数化。如果这不是您的意图(以这种方式链接它们),请制作 Context static 或将其声明为顶级类。

忽略 Reducer因为它是 Hadoop 代码库的一部分。

关于java - 使用泛型类的内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36586635/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com