[ 
https://issues.apache.org/jira/browse/FLINK-3444?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15260115#comment-15260115
 ] 

Till Rohrmann commented on FLINK-3444:
--------------------------------------

I'm wondering why the above described problem was solved by introducing an 
overloaded method {{fromElements}} which takes as the first parameter the 
{{Class<T>}} of the elements? The problem is that if you do something like 
{{env.fromElements(SubClass.class, new ParentClass())}} then the vararg only 
variant of {{fromElements}} will be called with type {{Object}} as result 
(since Object is the super type of {{Class<SubClass>}} and {{ParentClass}}. The 
reason is that {{ParentClass}} is not a subtype of {{SubClass}} and thus the 
new {{fromElements}} method is not applicable.

Wouldn't it have been better to automatically infer the super type of all given 
elements? Usually the {{fromElements}} method is only called for very few 
elements and, thus, it should be feasible to iterate over all elements to 
extract the common super type. 

> env.fromElements relies on the first input element for determining the 
> DataSet/DataStream type
> ----------------------------------------------------------------------------------------------
>
>                 Key: FLINK-3444
>                 URL: https://issues.apache.org/jira/browse/FLINK-3444
>             Project: Flink
>          Issue Type: Bug
>          Components: DataSet API, DataStream API
>    Affects Versions: 0.10.0, 1.0.0
>            Reporter: Vasia Kalavri
>             Fix For: 1.1.0
>
>
> The {{fromElements}} method of the {{ExecutionEnvironment}} and 
> {{StreamExecutionEnvironment}} determines the DataSet/DataStream type by 
> extracting the type of the first input element.
> This is problematic if the first element is a subtype of another element in 
> the collection.
> For example, the following
> {code}
> DataStream<Event> input = env.fromElements(new Event(1, "a"), new SubEvent(2, 
> "b"));
> {code}
> succeeds, while the following
> {code}
> DataStream<Event> input = env.fromElements(new SubEvent(1, "a"), new Event(2, 
> "b"));
> {code}
> fails with "java.lang.IllegalArgumentException: The elements in the 
> collection are not all subclasses of SubEvent".



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to