Thanks for driving this thread Andrey. Conclusion looks good to me.

Best,
tison.


Andrey Zagrebin <and...@ververica.com> 于2019年8月21日周三 下午7:25写道:

> FYI the PR: https://github.com/apache/flink-web/pull/251
> A review from the discussion participants would be appreciated.
>
> On Wed, Aug 21, 2019 at 1:23 PM Timo Walther <twal...@apache.org> wrote:
>
> > Thanks for summarizing the discussion Andrey, +1 to this style.
> >
> > Regards,
> > Timo
> >
> >
> > Am 21.08.19 um 11:57 schrieb Andrey Zagrebin:
> > > Hi All,
> > >
> > > It looks like we have reached a consensus regarding the last left
> > question.
> > >
> > > I suggest the following final summary:
> > >
> > >     - Use @Nullable annotation where you do not use Optional for the
> > >     nullable values
> > >     - If you can prove that Optional usage would lead to a performance
> > >     degradation in critical code then fallback to @Nullable
> > >     - Always use Optional to return nullable values in the API/public
> > >     methods except the case of a proven performance concern
> > >     - Do not use Optional as a function argument, instead either
> overload
> > >     the method or use the Builder pattern for the set of function
> > arguments
> > >        - Note: an Optional argument can be allowed in a *private*
> helper
> > >        method if you believe that it simplifies the code, example is in
> > [1]
> > >        - Do not use Optional for class fields
> > >
> > > If there are no more comments/concerns/objections I will open a PR to
> > > reflect this in the code style guide.
> > >
> > > Bets,
> > > Andrey
> > >
> > > [1]
> > >
> >
> https://github.com/apache/flink/blob/master/flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/typeutils/AvroFactory.java#L95
> > >
> > > On Tue, Aug 20, 2019 at 10:35 AM Yu Li <car...@gmail.com> wrote:
> > >
> > >> Thanks for the summarize Andrey!
> > >>
> > >> I'd also like to adjust my -1 to +0 on using Optional as parameter for
> > >> private methods due to the existence of the very first rule - "Avoid
> > using
> > >> Optional in any performance critical code". I'd regard the "possible
> GC
> > >> burden while using Optional as parameter" also one performance related
> > >> factor.
> > >>
> > >> And besides the code convention itself, I believe it's even more
> > important
> > >> to make us contributors know the reason behind.
> > >>
> > >> Thanks.
> > >>
> > >> Best Regards,
> > >> Yu
> > >>
> > >>
> > >> On Tue, 20 Aug 2019 at 10:14, Stephan Ewen <se...@apache.org> wrote:
> > >>
> > >>> I think Dawid raised a very good point here.
> > >>> One of the outcomes should be that we are consistent in our
> > >> recommendations
> > >>> and requests during PR reviews. Otherwise we'll just confuse
> > >> contributors.
> > >>> So I would be
> > >>>    +1 for someone to use Optional in a private method if they believe
> > it
> > >> is
> > >>> helpful
> > >>>    -1 to push contributors during reviews to do that
> > >>>
> > >>>
> > >>> On Tue, Aug 20, 2019 at 9:42 AM Dawid Wysakowicz <
> > dwysakow...@apache.org
> > >>>
> > >>> wrote:
> > >>>
> > >>>> Hi Andrey,
> > >>>>
> > >>>> Just wanted to quickly elaborate on my opinion. I wouldn't say I am
> > -1,
> > >>>> just -0 for the Optionals in private methods. I am ok with not
> > >>>> forbidding them there. I just think in all cases there is a better
> > >>>> solution than passing the Optionals around, even in private
> methods. I
> > >>>> just hope the outcome of the discussion won't be that it is no
> longer
> > >>>> allowed to suggest those during review.
> > >>>>
> > >>>> Best,
> > >>>>
> > >>>> Dawid
> > >>>>
> > >>>> On 19/08/2019 17:53, Andrey Zagrebin wrote:
> > >>>>> Hi all,
> > >>>>>
> > >>>>> Sorry for not getting back to this discussion for some time.
> > >>>>> It looks like in general we agree on the initially suggested
> points:
> > >>>>>
> > >>>>>     - Always use Optional only to return nullable values in the
> > >>> API/public
> > >>>>>     methods
> > >>>>>        - Only if you can prove that Optional usage would lead to a
> > >>>>>        performance degradation in critical code then return
> nullable
> > >>> value
> > >>>>>        directly and annotate it with @Nullable
> > >>>>>     - Passing an Optional argument to a method can be allowed if it
> > is
> > >>>>>     within a private helper method and simplifies the code
> > >>>>>     - Optional should not be used for class fields
> > >>>>>
> > >>>>> The first point can be also elaborated by explicitly forbiding
> > >>>>> Optional/Nullable parameters in public methods.
> > >>>>> In general we can always avoid Optional parameters by either
> > >>> overloading
> > >>>>> the method or using a pojo with a builder to pass a set of
> > >> parameters.
> > >>>>> The third point does not prevent from using @Nullable/@Nonnull for
> > >>> class
> > >>>>> fields.
> > >>>>> If we agree to not use Optional for fields then not sure I see any
> > >> use
> > >>>> case
> > >>>>> for SerializableOptional (please comment on that if you have more
> > >>>> details).
> > >>>>> @Jingsong Lee
> > >>>>> Using Optional in Maps.
> > >>>>> I can see this as a possible use case.
> > >>>>> I would leave this decision to the developer/reviewer to reason
> about
> > >>> it
> > >>>>> and keep the scope of this discussion to the variables/parameters
> as
> > >> it
> > >>>>> seems to be the biggest point of friction atm.
> > >>>>>
> > >>>>> Finally, I see a split regarding the second point: <Passing an
> > >> Optional
> > >>>>> argument to a method can be allowed if it is within a private
> helper
> > >>>> method
> > >>>>> and simplifies the code>.
> > >>>>> There are people who have a strong opinion against allowing it.
> > >>>>> Let's vote then for whether to allow it or not.
> > >>>>> So far as I see we have the following votes (correct me if wrong
> and
> > >>> add
> > >>>>> more if you want):
> > >>>>> Piotr        +1
> > >>>>> Biao        +1
> > >>>>> Timo       -1
> > >>>>> Yu           -1
> > >>>>> Aljoscha -1
> > >>>>> Till          +1
> > >>>>> Igal        +1
> > >>>>> Dawid    -1
> > >>>>> Me         +1
> > >>>>>
> > >>>>> So far: +5 / -4 (Optional arguments in private methods)
> > >>>>>
> > >>>>> Best,
> > >>>>> Andrey
> > >>>>>
> > >>>>>
> > >>>>> On Tue, Aug 6, 2019 at 8:53 AM Piotr Nowojski <pi...@ververica.com
> >
> > >>>> wrote:
> > >>>>>> Hi Qi,
> > >>>>>>
> > >>>>>>> For example, SingleInputGate is already creating Optional for
> every
> > >>>>>> BufferOrEvent in getNextBufferOrEvent(). How much performance gain
> > >>>> would we
> > >>>>>> get if it’s replaced by null check?
> > >>>>>>
> > >>>>>> When I was introducing it there, I have micro-benchmarked this
> > >> change,
> > >>>> and
> > >>>>>> there was no visible throughput change in a pure network only
> micro
> > >>>>>> benchmark (with whole Flink running around it any changes would be
> > >>> even
> > >>>>>> less visible).
> > >>>>>>
> > >>>>>> Piotrek
> > >>>>>>
> > >>>>>>> On 5 Aug 2019, at 15:20, Till Rohrmann <trohrm...@apache.org>
> > >> wrote:
> > >>>>>>> I'd be in favour of
> > >>>>>>>
> > >>>>>>> - Optional for method return values if not performance critical
> > >>>>>>> - Optional can be used for internal methods if it makes sense
> > >>>>>>> - No optional fields
> > >>>>>>>
> > >>>>>>> Cheers,
> > >>>>>>> Till
> > >>>>>>>
> > >>>>>>> On Mon, Aug 5, 2019 at 12:07 PM Aljoscha Krettek <
> > >>> aljos...@apache.org>
> > >>>>>>> wrote:
> > >>>>>>>
> > >>>>>>>> Hi,
> > >>>>>>>>
> > >>>>>>>> I’m also in favour of using Optional only for method return
> > >> values.
> > >>> I
> > >>>>>>>> could be persuaded to allow them for parameters of internal
> > >> methods
> > >>>> but
> > >>>>>> I’m
> > >>>>>>>> sceptical about that.
> > >>>>>>>>
> > >>>>>>>> Aljoscha
> > >>>>>>>>
> > >>>>>>>>> On 2. Aug 2019, at 15:35, Yu Li <car...@gmail.com> wrote:
> > >>>>>>>>>
> > >>>>>>>>> TL; DR: I second Timo that we should use Optional only as
> method
> > >>>> return
> > >>>>>>>>> type for non-performance critical code.
> > >>>>>>>>>
> > >>>>>>>>>  From the example given on our AvroFactory [1] I also noticed
> > that
> > >>>>>>>> Jetbrains
> > >>>>>>>>> marks the OptionalUsedAsFieldOrParameterType inspection as a
> > >>> warning.
> > >>>>>>>> It's
> > >>>>>>>>> relatively easy to understand why it's not suggested to use
> > >>>> (java.util)
> > >>>>>>>>> Optional as a field since it's not serializable. What made me
> > >> feel
> > >>>>>>>> curious
> > >>>>>>>>> is that why we shouldn't use it as a parameter type, so I did
> > >> some
> > >>>>>>>>> investigation and here is what I found:
> > >>>>>>>>>
> > >>>>>>>>> There's a JB blog talking about java8 top tips [2] where we
> could
> > >>>> find
> > >>>>>>>> the
> > >>>>>>>>> advice around Optional, there I found another blog telling
> about
> > >>> the
> > >>>>>>>>> pragmatic approach of using Optional [3]. Reading further we
> > >> could
> > >>>> see
> > >>>>>>>> the
> > >>>>>>>>> reason why we shouldn't use Optional as parameter type, please
> > >>> allow
> > >>>> me
> > >>>>>>>> to
> > >>>>>>>>> quote here:
> > >>>>>>>>>
> > >>>>>>>>> It is often the case that domain objects hang about in memory
> > >> for a
> > >>>>>> fair
> > >>>>>>>>> while, as processing in the application occurs, making each
> > >>> optional
> > >>>>>>>>> instance rather long-lived (tied to the lifetime of the domain
> > >>>> object).
> > >>>>>>>> By
> > >>>>>>>>> contrast, the Optionalinstance returned from the getter is
> likely
> > >>> to
> > >>>> be
> > >>>>>>>>> very short-lived. The caller will call the getter, interpret
> the
> > >>>>>> result,
> > >>>>>>>>> and then move on. If you know anything about garbage collection
> > >>>> you'll
> > >>>>>>>> know
> > >>>>>>>>> that the JVM handles these short-lived objects well. In
> addition,
> > >>>> there
> > >>>>>>>> is
> > >>>>>>>>> more potential for hotspot to remove the costs of the Optional
> > >>>> instance
> > >>>>>>>>> when it is short lived. While it is easy to claim this is
> > >>> "premature
> > >>>>>>>>> optimization", as engineers it is our responsibility to know
> the
> > >>>> limits
> > >>>>>>>> and
> > >>>>>>>>> capabilities of the system we work with and to choose carefully
> > >> the
> > >>>>>> point
> > >>>>>>>>> where it should be stressed.
> > >>>>>>>>>
> > >>>>>>>>> And there's another JB blog about code smell on Null [4], which
> > >> I'd
> > >>>>>> also
> > >>>>>>>>> suggest to read(smile).
> > >>>>>>>>>
> > >>>>>>>>> [1]
> > >>>>>>>>>
> > >>
> >
> https://github.com/apache/flink/blob/master/flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/typeutils/AvroFactory.java#L95
> > >>>>>>>>> [2] https://blog.jetbrains.com/idea/2016/07/java-8-top-tips/
> > >>>>>>>>> [3]
> > >>
> > https://blog.joda.org/2015/08/java-se-8-optional-pragmatic-approach.html
> > >>>>>>>>> [4] https://blog.jetbrains.com/idea/2017/08/code-smells-null/
> > >>>>>>>>>
> > >>>>>>>>> Best Regards,
> > >>>>>>>>> Yu
> > >>>>>>>>>
> > >>>>>>>>>
> > >>>>>>>>> On Fri, 2 Aug 2019 at 14:54, JingsongLee <
> > >> lzljs3620...@aliyun.com
> > >>>>>>>> .invalid>
> > >>>>>>>>> wrote:
> > >>>>>>>>>
> > >>>>>>>>>> Hi,
> > >>>>>>>>>> First, Optional is just a wrapper, just like boxed value. So
> as
> > >>> long
> > >>>>>> as
> > >>>>>>>>>> it's
> > >>>>>>>>>> not a field level operation, I think it is OK to performance.
> > >>>>>>>>>> I think guava optional has a good summary to the uses. [1]
> > >>>>>>>>>>> As a method return type, as an alternative to returning null
> to
> > >>>>>>>> indicate
> > >>>>>>>>>> that no value was available
> > >>>>>>>>>>> To distinguish between "unknown" (for example, not present
> in a
> > >>>> map)
> > >>>>>>>>>> and "known to have no value"
> > >>>>>>>>>>> To wrap nullable references for storage in a collection that
> > >> does
> > >>>> not
> > >>>>>>>>>> support
> > >>>>>>>>>> The latter two points seem reasonable, but they have few
> scenes.
> > >>>>>>>>>>
> > >>>>>>>>>> [1]
> > >>>>>>>>>>
> > >>
> >
> https://github.com/google/guava/blob/master/guava/src/com/google/common/base/Optional.java
> > >>>>>>>>>> Best,
> > >>>>>>>>>> Jingsong Lee
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >> ------------------------------------------------------------------
> > >>>>>>>>>> From:Timo Walther <twal...@apache.org>
> > >>>>>>>>>> Send Time:2019年8月2日(星期五) 14:12
> > >>>>>>>>>> To:dev <dev@flink.apache.org>
> > >>>>>>>>>> Subject:Re: [DISCUSS][CODE STYLE] Usage of Java Optional
> > >>>>>>>>>>
> > >>>>>>>>>> Hi everyone,
> > >>>>>>>>>>
> > >>>>>>>>>> I would vote for using Optional only as method return type for
> > >>>>>>>>>> non-performance critical code. Nothing more. No fields, no
> > >> method
> > >>>>>>>>>> parameters. Method parameters can be overloaded and
> internally a
> > >>>> class
> > >>>>>>>>>> can work with nulls and @Nullable. Optional is meant for API
> > >>> method
> > >>>>>>>>>> return types and I think we should not abuse it and spam the
> > >> code
> > >>>> with
> > >>>>>>>>>> `@SuppressWarnings("OptionalUsedAsFieldOrParameterType")`.
> > >>>>>>>>>>
> > >>>>>>>>>> Regards,
> > >>>>>>>>>>
> > >>>>>>>>>> Timo
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>>> Am 02.08.19 um 11:08 schrieb Biao Liu:
> > >>>>>>>>>>> Hi Jark & Zili,
> > >>>>>>>>>>>
> > >>>>>>>>>>> I thought it means "Optional should not be used for class
> > >>> fields".
> > >>>>>>>>>> However
> > >>>>>>>>>>> now I get a bit confused about the edited version.
> > >>>>>>>>>>>
> > >>>>>>>>>>> Anyway +1 to "Optional should not be used for class fields"
> > >>>>>>>>>>>
> > >>>>>>>>>>> Thanks,
> > >>>>>>>>>>> Biao /'bɪ.aʊ/
> > >>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>>>
> > >>>>>>>>>>> On Fri, Aug 2, 2019 at 5:00 PM Zili Chen <
> wander4...@gmail.com
> > >>>>>> wrote:
> > >>>>>>>>>>>> Hi Jark,
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> Follow your opinion, for class field, we can make
> > >>>>>>>>>>>> use of @Nullable/@Nonnull annotation or Flink's
> > >>>>>>>>>>>> SerializableOptional. It would be sufficient.
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> Best,
> > >>>>>>>>>>>> tison.
> > >>>>>>>>>>>>
> > >>>>>>>>>>>>
> > >>>>>>>>>>>> Jark Wu <imj...@gmail.com> 于2019年8月2日周五 下午4:57写道:
> > >>>>>>>>>>>>
> > >>>>>>>>>>>>> Hi Andrey,
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> I have some concern on point (3) "even class fields as e.g.
> > >>>>>> optional
> > >>>>>>>>>>>> config
> > >>>>>>>>>>>>> options with implicit default values".
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> Regarding to the Oracle's guide (4) "Optional should not be
> > >>> used
> > >>>>>> for
> > >>>>>>>>>>>> class
> > >>>>>>>>>>>>> fields".
> > >>>>>>>>>>>>> And IntelliJ IDEA also report warnings if a class field is
> > >>>>>> Optional,
> > >>>>>>>>>>>>> because Optional is not serializable.
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> Do we allow Optional as class field only if the class is
> not
> > >>>>>>>>>> serializable
> > >>>>>>>>>>>>> or forbid this totally?
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> Thanks,
> > >>>>>>>>>>>>> Jark
> > >>>>>>>>>>>>>
> > >>>>>>>>>>>>> On Fri, 2 Aug 2019 at 16:30, Biao Liu <mmyy1...@gmail.com>
> > >>>> wrote:
> > >>>>>>>>>>>>>> Hi Andrey,
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Thanks for working on this.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> +1 it's clear and acceptable for me.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> To Qi,
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> IMO the most performance critical codes are "per record"
> > >> code
> > >>>>>> path.
> > >>>>>>>> We
> > >>>>>>>>>>>>>> should definitely avoid Optional there. For your concern,
> > >> it's
> > >>>>>> "per
> > >>>>>>>>>>>>> buffer"
> > >>>>>>>>>>>>>> code path which seems to be acceptable with Optional.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Just one more question, is there any other code paths
> which
> > >>> are
> > >>>>>> also
> > >>>>>>>>>>>>>> critical? I think we'd better note that clearly.
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> Thanks,
> > >>>>>>>>>>>>>> Biao /'bɪ.aʊ/
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>
> > >>>>>>>>>>>>>> On Fri, Aug 2, 2019 at 11:08 AM qi luo <
> luoqi...@gmail.com>
> > >>>>>> wrote:
> > >>>>>>>>>>>>>>> Agree that using Optional will improve code robustness.
> > >>> However
> > >>>>>>>> we’re
> > >>>>>>>>>>>>>>> hesitating to use Optional in data intensive operations.
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>> For example, SingleInputGate is already creating Optional
> > >> for
> > >>>>>> every
> > >>>>>>>>>>>>>>> BufferOrEvent in getNextBufferOrEvent(). How much
> > >> performance
> > >>>>>> gain
> > >>>>>>>>>>>>> would
> > >>>>>>>>>>>>>> we
> > >>>>>>>>>>>>>>> get if it’s replaced by null check?
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>> Regards,
> > >>>>>>>>>>>>>>> Qi
> > >>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> On Aug 1, 2019, at 11:00 PM, Andrey Zagrebin <
> > >>>>>>>> and...@ververica.com
> > >>>>>>>>>>>>>>> wrote:
> > >>>>>>>>>>>>>>>> Hi all,
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> This is the next follow up discussion about suggestions
> > >> for
> > >>>> the
> > >>>>>>>>>>>>> recent
> > >>>>>>>>>>>>>>>> thread about code style guide in Flink [1].
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> In general, one could argue that any variable, which is
> > >>>>>> nullable,
> > >>>>>>>>>>>> can
> > >>>>>>>>>>>>>> be
> > >>>>>>>>>>>>>>>> replaced by wrapping it with Optional to explicitly show
> > >>> that
> > >>>> it
> > >>>>>>>>>>>> can
> > >>>>>>>>>>>>> be
> > >>>>>>>>>>>>>>>> null. Examples are:
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>   - returned values to force user to check not null
> > >>>>>>>>>>>>>>>>   - optional function arguments, e.g. with implicit
> > default
> > >>>>>> values
> > >>>>>>>>>>>>>>>>   - even class fields as e.g. optional config options
> with
> > >>>>>>>> implicit
> > >>>>>>>>>>>>>>>>   default values
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> At the same time, we also have @Nullable annotation to
> > >>> express
> > >>>>>>>> this
> > >>>>>>>>>>>>>>>> intention.
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> Also, when the class Optional was introduced, Oracle
> > >> posted
> > >>> a
> > >>>>>>>>>>>>> guideline
> > >>>>>>>>>>>>>>>> about its usage [2]. Basically, it suggests to use it
> > >> mostly
> > >>>> in
> > >>>>>>>>>>>> APIs
> > >>>>>>>>>>>>>> for
> > >>>>>>>>>>>>>>>> returned values to inform and force users to check the
> > >>>> returned
> > >>>>>>>>>>>> value
> > >>>>>>>>>>>>>>>> instead of returning null and avoid
> NullPointerException.
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> Wrapping with Optional also comes with the performance
> > >>>> overhead.
> > >>>>>>>>>>>>>>>> Following the Oracle's guide in general, the suggestion
> > >> is:
> > >>>>>>>>>>>>>>>>   - Avoid using Optional in any performance critical
> code
> > >>>>>>>>>>>>>>>>   - Use Optional only to return nullable values in the
> > >>>> API/public
> > >>>>>>>>>>>>>> methods
> > >>>>>>>>>>>>>>>>   unless it is performance critical then rather use
> > >> @Nullable
> > >>>>>>>>>>>>>>>>   - Passing an Optional argument to a method can be
> > allowed
> > >>> if
> > >>>> it
> > >>>>>>>>>>>> is
> > >>>>>>>>>>>>>>>>   within a private helper method and simplifies the
> code,
> > >>>> example
> > >>>>>>>>>>>> is
> > >>>>>>>>>>>>> in
> > >>>>>>>>>>>>>>> [3]
> > >>>>>>>>>>>>>>>>   - Optional should not be used for class fields
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> Please, feel free to share you thoughts.
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> Best,
> > >>>>>>>>>>>>>>>> Andrey
> > >>>>>>>>>>>>>>>>
> > >>>>>>>>>>>>>>>> [1]
> > >>>>>>>>>>>>>>>>
> > >>
> >
> http://mail-archives.apache.org/mod_mbox/flink-dev/201906.mbox/%3ced91df4b-7cab-4547-a430-85bc710fd...@apache.org%3E
> > >>>>>>>>>>>>>>>> [2]
> > >>>>>>>>>>>>>>>>
> > >>
> >
> https://www.oracle.com/technetwork/articles/java/java8-optional-2175753.html
> > >>>>>>>>>>>>>>>> [3]
> > >>>>>>>>>>>>>>>>
> > >>
> >
> https://github.com/apache/flink/blob/master/flink-formats/flink-avro/src/main/java/org/apache/flink/formats/avro/typeutils/AvroFactory.java#L95
> > >>>>>>>>>>
> > >>>>
> >
> >
>

Reply via email to