【发布时间】:2021-05-07 01:37:35
【问题描述】:
start() 和 poll() 是抽象的,所以在我从 SourceTask 扩展的类中,我可以执行以下操作:
public void start(Map<String, String> props, Object anotherParameter)
{
//whatever
}
public List<SourceRecord> poll(Object anotherParameter) throws InterruptedException
{
//whatever
}
但是调用“poll(whateverObject)”或“start(props,whateverObject)”的代码如何初始化whateverObject并在调用它时正确引用它?因为我不能自定义调用这个方法的代码,对吧?或者我可以吗?如果是,如何?
我已经看到了其他连接器实现,但我不明白它是如何工作的。
【问题讨论】:
-
不确定我是否理解这个问题。这些方法是抽象的,因为您要覆盖和实现它们。该答案不仅限于 Connect API。除此之外,start only takes one parameter and poll takes none
-
抽象方法的意义在于,用户可以按照他们认为合适的方式实现它们,只要实现满足方法的约定即可。然后其他代码可以调用这些方法而不用担心实现。考虑到这一点,我不确定您实际上在哪里感到困惑?
-
我的意思是,如果方法是抽象的,我可以向它添加参数,而不是实现:
public List<SourceRecord> poll()我可以实现:public List<SourceRecord> poll(Object parameter)这对于抽象方法来说很好。问题是我无法控制调用 poll() 的方式和时间,那么如何让 kafka 调用 poll(Object parameter) 而不仅仅是 poll()。 -
"我的意思是,如果方法是抽象的,我可以向它添加参数" – 这不是真的。您的
#poll(Object)方法重载#poll()方法,但不会覆盖它。
标签: java apache-kafka apache-kafka-connect