Andrew Geery created WICKET-5846:
------------------------------------

             Summary: Widen generic definition on AbstractRangeValidator 
                 Key: WICKET-5846
                 URL: https://issues.apache.org/jira/browse/WICKET-5846
             Project: Wicket
          Issue Type: Improvement
          Components: wicket
    Affects Versions: 7.0.0-M5
            Reporter: Andrew Geery
            Priority: Minor


I ran into a problem extending 
{{org.apache.wicket.validation.validator.AbstractRangeValidator}} to work with 
{{java.time.LocalDate}} in Java 8.

The problem is the generic R parameter in {{AbstractRangeValidator}}:

{code:java}
public abstract class AbstractRangeValidator<R extends Comparable<R> & 
Serializable, V extends Serializable> { ... }
{code}

The issue is that while {{LocalDate}} is both {{Serializable}} and 
{{Comparable}}, it doesn't implement {{Comparable<LocalDate>}}, as required by 
{{AbstractRangeValidator}}.  Instead, it implements 
{{Comparable<ChronoLocalDate>}}.

In order to get {{AbstractRangeValidator}} to work with {{LocalDate}}, we need 
to relax/widen the definition of R to extend Comparable that is bound to a 
super of R:

{code:java}
public abstract class AbstractRangeValidator<R extends Comparable<? super R> & 
Serializable, V extends Serializable>
{code}

As this definition is slightly wider than the previous definition, all previous 
uses will continue to be valid.  The advantage to making this change is that it 
allows the {{AbstractRangeValidator}} to work with other classes like 
{{LocalDate}}.



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

Reply via email to