Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.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/0/laravel/11.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
需要说明:为了避免强制转换,泛型友好性在Java8中不再需要了 *@不推荐使用Java 8。此方法将在Mockito 3.0中删除。此方法仅用于泛型 *为了避免强制转换,Java8不再需要这种友好性。 */ 公共静态列表anyListOf(类clazz){ 返回anyList(); }_Java_Generics_Java 8_Mockito - Fatal编程技术网

需要说明:为了避免强制转换,泛型友好性在Java8中不再需要了 *@不推荐使用Java 8。此方法将在Mockito 3.0中删除。此方法仅用于泛型 *为了避免强制转换,Java8不再需要这种友好性。 */ 公共静态列表anyListOf(类clazz){ 返回anyList(); }

需要说明:为了避免强制转换,泛型友好性在Java8中不再需要了 *@不推荐使用Java 8。此方法将在Mockito 3.0中删除。此方法仅用于泛型 *为了避免强制转换,Java8不再需要这种友好性。 */ 公共静态列表anyListOf(类clazz){ 返回anyList(); },java,generics,java-8,mockito,Java,Generics,Java 8,Mockito,我在研究Mockito源代码时遇到了这个不推荐使用的方法,有人能解释一下Java8是如何处理这个问题的吗。请举一个例子,说明如何调用泛型方法,而不使用此方法作为参数 * @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic * friendliness to avoid casting, this is not anymore needed

我在研究Mockito源代码时遇到了这个不推荐使用的方法,有人能解释一下Java8是如何处理这个问题的吗。请举一个例子,说明如何调用泛型方法,而不使用此方法作为参数

* @deprecated With Java 8 this method will be removed in Mockito 3.0. This method is only used for generic
 * friendliness to avoid casting, this is not anymore needed in Java 8.
 */
public static <T> List<T> anyListOf(Class<T> clazz) {
    return anyList();
}
@测试
public void getDataTest(){
when(dataSetDao.getDataSetList()).thenReturn(getMockDataSetList());
当(serviceUtil.getDataFromEndpoint(anyInt()、anyList()、anyString()、any(TypeToken.class)、anyString())。然后返回(getMockDataList());
List dataList=noadataservice.getData();
验证(serviceUtil,times(11)).getDataFromEndpoint(anyInt(),anyList(),anyString(),any(TypeToken.class),anyString());
assertEquals(11,dataList.size());
}
私有列表getMockDataList(){
List dataList=new ArrayList();
对于(int i=0;i<1;++i){
添加(新数据());
}
返回(列表)数据列表;
}
无法解析方法'thenReturn(java.util.List)。这是我以上述方式调用方法时收到的错误

如果Java8中的类型推断得到了改进,有人能解释为什么会出现这个错误吗

正在调用的方法:

@Test
public void getDataTest() {
    when(dataSetDao.getDataSetList()).thenReturn(getMockDataSetList());
    when(serviceUtil.getDataFromEndpoint(anyInt(), anyList(), anyString(), any(TypeToken.class), anyString())).thenReturn(getMockDataList());
    List<Data> dataList = noaaDataService.getData();
    verify(serviceUtil, times(11)).getDataFromEndpoint(anyInt(), anyList(), anyString(), any(TypeToken.class), anyString());
    assertEquals(11, dataList.size());

}

private <T> List<T> getMockDataList() {
    List<Data> dataList = new ArrayList<>();
    for (int i = 0; i < 1; ++i) {
        dataList.add(new Data());
    }
    return (List<T>) dataList;
}
/**
*从rest端点获取数据的通用方法。
*
*@param offset默认值应为0,递归就地调用将增加该值,直到我们获取所有记录。
*@param dataList返回并传递给递归调用。
*@param postFixUrl要使用的端点。
*@param responseType用于将响应转换为json,我们需要它以便在编译时知道泛型类型。
*@param实体,我们正在为其获取数据。
*@param arguments要传递给uri的参数。
*@返回从响应派生的T的列表。
*/
公共列表getDataFromEndpoint(
int偏移量、列表数据列表、字符串后缀URL、,
TypeToken响应类型(字符串参数)
暂时解决这个问题,有没有更好的方法

/**
 * Generic method to fetch data from rest endpoint.
 *
 * @param offset       Default should be 0, recursive call in place would increase it till we have fetched all the records.
 * @param dataList     List to be returned and passed on to the recursive call.
 * @param postFixUrl   End point to be used.
 * @param responseType Used to convert the response into json, need this so that we will know the generic type at compile time.
 * @param <T>          Entity for which we are fetching the data.
 * @param arguments    Arguments to be passed to the uri.
 * @return A list of T derived from the response.
 */
public <T> List<T> getDataFromEndpoint(
    int offset, List<T> dataList, String postFixUrl,
    TypeToken<ArrayList<T>> responseType, String arguments)
@测试
public void getDataTest(){
when(dataSetDao.getDataSetList()).thenReturn(getMockDataSetList());
当(serviceUtil.getDataFromEndpoint(anyInt()、anyList()、anyString()、any(TypeToken.class)、anyString())。然后返回(getMockDataList(Data.class));
List dataList=noadataservice.getData();
验证(serviceUtil,times(11)).getDataFromEndpoint(anyInt(),anyList(),anyString(),any(TypeToken.class),anyString());
assertEquals(11,dataList.size());
}
私有列表getMockDataList(T类型){
List dataList=new ArrayList();
对于(int i=0;i<1;++i){
添加(新数据());
}
返回(列表)数据列表;
}

提前感谢。

问题在于,
getDataFromEndpoint(…)
方法的返回类型是泛型的,其
T
类型参数仅从通过提供

@Test
public void getDataTest() {
    when(dataSetDao.getDataSetList()).thenReturn(getMockDataSetList());
    when(serviceUtil.getDataFromEndpoint(anyInt(), anyList(), anyString(), any(TypeToken.class), anyString())).thenReturn(getMockDataList(Data.class));
    List<Data> dataList = noaaDataService.getData();
    verify(serviceUtil, times(11)).getDataFromEndpoint(anyInt(), anyList(), anyString(), any(TypeToken.class), anyString());
    assertEquals(11, dataList.size());

}

private <T> List<T> getMockDataList(T type) {
    List<Data> dataList = new ArrayList<>();
    for (int i = 0; i < 1; ++i) {
        dataList.add(new Data());
    }
    return (List<T>) dataList;
}
将是

when(...)
您的代码应该使用所有主要的编译器进行编译,无论是JDK、Eclipse、IntelliJ IDEA还是Netbeans。
通常工作正常,但在本例中,您提供了错误的参数使其工作。

类型推断在Java 8中得到了改进。我相信您将
anyListOf()
调用替换为
anyList()
调用。我之前尝试过,但它给了我一个错误,我更新了问题以反映这一点。在8中,包含方法参数是为了找出目标类型,这就是这里发生的事情抱歉延迟响应,我已经更新了问题,使用代码而不是图像。感谢您的回答,这解决了问题。很高兴知道我们可以用这种方式调用泛型方法。
when(...)
OngoingStubbing<List<Object>>
OngoingStubbing<List<Data>>
serviceUtil.<Data> getDataFromEndpoint(...)