小编hao*_*ang的帖子

为什么这个通用赋值是非法的?

我有一堂课:

class Generic<T> {
    List<List<T>> getList() {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我Generic用通配符和调用getList方法声明 a时,以下赋值是非法的。

Generic<? extends Number> tt = null;
List<List<? extends Number>> list = tt.getList(); // this line gives compile error
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很奇怪,因为根据 的声明Generic,很自然地创建 aGeneric<T>并获得 a List<List<T>>when call getList

事实上,它需要我像这样写作业:

List<? extends List<? extends Number>> list = tt.getList(); // this one is correct
Run Code Online (Sandbox Code Playgroud)

我想知道为什么第一个是非法的,为什么第二个是合法的。

我给出的例子只是一些示例代码来说明问题,您不必关心它们的含义。

错误信息:

不兼容的类型:
必需:List<java.util.List<? extends java.lang.Number>>
找到:List<java.util.List<capture<? extends java.lang.Number>>>

java generics bounded-wildcard

10
推荐指数
1
解决办法
296
查看次数

使用 Mockito.mockStatic 模拟静态方法时出现 UnfinishedStubbingException

LocalDate.now()当使用 模拟静态方法时,我得到了这个异常Mockito.mockStatic()

org.mockito.exceptions.misusing.UnfinishedStubbingException:此处检测到未完成的存根:at utils.PowerMockTest.test(PowerMockTest.java:18)

例如 thenReturn() 可能会丢失。
正确存根的示例:when(mock.isOk()).thenReturn(true); 当(mock.isOk()).thenThrow(异常); doThrow(异常).when(mock).someVoidMethod(); 提示:

  1. 缺少 thenReturn()
  2. 您正在尝试存根最终方法,该方法不受支持
  3. 在“thenReturn”指令完成之前,您正在对内部另一个模拟的行为进行存根

代码是

public class MockStaticTest {
    @Test
    void test(){
        LocalDate today=LocalDate.of(2020,11,20);
        try (MockedStatic mocked = mockStatic(LocalDate.class)) {
            mocked.when(LocalDate::now).thenReturn(LocalDate.of(2020,11,10));
            Assertions.assertEquals(today,LocalDate.now());
            mocked.verify(atLeastOnce(),LocalDate::now);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我对异常消息有点困惑,因为我确实添加了thenReturn语句。
任何帮助,将不胜感激。

java unit-testing mockito

6
推荐指数
2
解决办法
3205
查看次数

kafka生产者如何发送批次?

我知道kafka生产者会将消息分批进行。每个批次属于一个特定的分区。

我的问题是

  1. 生产者是否知道每个批次属于哪个分区?
  2. 生产者是否知道每个分区的代理地址?
  3. 当生产者发送请求时,每个请求是包含多个批次还是仅包含属于目标分区的一个批次。
  4. 如果生产者发送多个批次,接收kafka服务器是否将批次重新传输到目标分区。

apache-kafka

4
推荐指数
1
解决办法
1511
查看次数

在处理函数之后,带键的流是否变为不带键的?

假设我在键控过程后得到一个流。

DataStream<T> stream= sourceStream.keyBy(key).window(window).apply(function);
Run Code Online (Sandbox Code Playgroud)

生成的流是否仍被键入?我可以在该流中使用某些 Keyed 状态吗?

apache-flink flink-streaming

2
推荐指数
1
解决办法
1138
查看次数