[ 
https://issues.apache.org/jira/browse/KAFKA-8035?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bruno Cadonna updated KAFKA-8035:
---------------------------------
    Description: 
During the work on KAFKA-4217, it was discovered that some combinations of Java 
generics block the usage of lambda functions ([see this 
discussion|https://github.com/apache/kafka/pull/5273#discussion_r216810275]).

To avoid using those blocking combinations of generics, tests shall be 
implemented that verify that lambda functions can be used with the KStream API. 
Those tests may also serve as regression tests to ensure that future changes to 
the generics in the KStream API may not block lambda functions and make the API 
incompatible with previous versions.

Unlike other tests, the tests required here pass if they compile. For example, 
to verify that the parameter {{mapper}} in
{code:java}
<KR, VR> KStream<KR, VR> flatMap(final KeyValueMapper<? super K, ? super V, ? 
extends Iterable<? extends KeyValue<? extends KR, ? extends VR>>> mapper);
{code}
accepts a {{KeyValueMapper}} specified as a lambda function that returns an 
implementation of the {{Iterable}} interface, the following stream could be 
specified in the test:
{code:java}
stream
    .flatMap((Integer key, Integer value) -> Arrays.asList(
        KeyValue.pair(key, value),
        KeyValue.pair(key, value),
        KeyValue.pair(key, value)))
    .foreach(action);
{code}
If the test compiles, the test passes.

Other tests for {{flatMap}} need to check the bounds of the generics, e.g., if 
the {{mapper}} accepts a {{KeyValueMapper}} specified as a lambda function that 
takes a super class of K and V as inputs.

  was:
During the work on KAFKA-4217, it was discovered that some combinations of Java 
generics block the usage of lambda functions 
([https://github.com/apache/kafka/pull/5273#discussion_r216810275|see this 
discussion]).

To avoid using those blocking combinations of generics, tests shall be 
implemented that verify that lambda functions can be used with the KStream API. 
Those tests may also serve as regression tests to ensure that future changes to 
the generics in the KStream API may not block lambda functions and make the API 
incompatible with previous versions.

Unlike other tests, the tests required here pass if they compile. For example, 
to verify that the parameter {{mapper}} in
{code:java}
<KR, VR> KStream<KR, VR> flatMap(final KeyValueMapper<? super K, ? super V, ? 
extends Iterable<? extends KeyValue<? extends KR, ? extends VR>>> mapper);
{code}
accepts a {{KeyValueMapper}} specified as a lambda function that returns an 
implementation of the {{Iterable}} interface, the following stream could be 
specified in the test:
{code:java}
stream
    .flatMap((Integer key, Integer value) -> Arrays.asList(
        KeyValue.pair(key, value),
        KeyValue.pair(key, value),
        KeyValue.pair(key, value)))
    .foreach(action);
{code}
If the test compiles, the test passes.

Other tests for {{flatMap}} need to check the bounds of the generics, e.g., if 
the {{mapper}} accepts a {{KeyValueMapper}} specified as a lambda function that 
takes a super class of K and V as inputs.


> Add tests for generic bounds for KStream API 
> ---------------------------------------------
>
>                 Key: KAFKA-8035
>                 URL: https://issues.apache.org/jira/browse/KAFKA-8035
>             Project: Kafka
>          Issue Type: Test
>          Components: streams
>            Reporter: Bruno Cadonna
>            Priority: Major
>
> During the work on KAFKA-4217, it was discovered that some combinations of 
> Java generics block the usage of lambda functions ([see this 
> discussion|https://github.com/apache/kafka/pull/5273#discussion_r216810275]).
> To avoid using those blocking combinations of generics, tests shall be 
> implemented that verify that lambda functions can be used with the KStream 
> API. Those tests may also serve as regression tests to ensure that future 
> changes to the generics in the KStream API may not block lambda functions and 
> make the API incompatible with previous versions.
> Unlike other tests, the tests required here pass if they compile. For 
> example, to verify that the parameter {{mapper}} in
> {code:java}
> <KR, VR> KStream<KR, VR> flatMap(final KeyValueMapper<? super K, ? super V, ? 
> extends Iterable<? extends KeyValue<? extends KR, ? extends VR>>> mapper);
> {code}
> accepts a {{KeyValueMapper}} specified as a lambda function that returns an 
> implementation of the {{Iterable}} interface, the following stream could be 
> specified in the test:
> {code:java}
> stream
>     .flatMap((Integer key, Integer value) -> Arrays.asList(
>         KeyValue.pair(key, value),
>         KeyValue.pair(key, value),
>         KeyValue.pair(key, value)))
>     .foreach(action);
> {code}
> If the test compiles, the test passes.
> Other tests for {{flatMap}} need to check the bounds of the generics, e.g., 
> if the {{mapper}} accepts a {{KeyValueMapper}} specified as a lambda function 
> that takes a super class of K and V as inputs.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to