为什么SourceTask中的start()和poll()是抽象的?



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并在调用时正确引用它?因为我不能自定义调用这些方法的代码?或者我可以吗?如果是,怎么做?

我见过其他连接器实现,但我不明白它是如何工作的。

start()和poll()是抽象的,所以在SourceTask扩展的类中,我可以做以下操作

不,你不能做以下的事情(添加参数)因为它们不是方法契约。

您仍然需要覆盖实际的方法,但是如果需要的话,您可以调用其他方法(具有相同的名称,带参数),但是这些方法不是抽象的,并且没有可以重载的语义含义,因此它们可以命名为任何名称,因此只是常规的Java方法调用。

我不能自定义调用这个方法的代码,对吗?

你不能*。

*除非你想从源代码重新构建Kafka Connect

问题是我无法控制如何以及何时调用poll()

正确。不太清楚你想添加什么参数,但poll确实不需要任何东西,你需要做的任何对象初始化都应该通过配置(传递给start方法的属性映射)

最新更新