In general, this is something that's good to start thinking about. I think we 
have two kinds of interfaces/non-final classes: ones that are for implementing 
and ones that are for encapsulation.

For implementing: Serde, Windows, StateStore, etc.
For encapsulation: KTable, Materialized, etc.

To me, `Suppress` is in the latter category: since we cast it to `SuppressImpl` 
immediately, it's not possible to pass in any other implementations of it. The 
interface/impl split is purely to provide a clean division of external/internal 
members. The regular Java access modifiers are insufficient for this purpose, 
since SuppressImpl's internal members need to be accessed from other internal 
classes, but outside of its package.

[ Full content available at: https://github.com/apache/kafka/pull/5567 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to