java - How to properly cast expected generic-typed arguments? -
i'm lost in generics (java). real scenario involves jpa , criteriabuilder's
<y extends comparable<? super y>> predicate greaterthan(expression<? extends y> x, y y); but simplified same case in following class:
public class genericstest { public class bean<t> { }; public <t extends comparable<t>> t targetmethod(bean<t> bean, t object) { return object; } @suppresswarnings("unchecked") public <t> t casttogeneric(bean<t> bean, object object) { return (t) object; } @suppresswarnings("unchecked") public <t> void understandgenerics(bean<t> bean, object object) { bean<comparable<t>> beanofcomparable = (bean<comparable<t>>) bean; comparable<t> comparableobject = this.casttogeneric(beanofcomparable, object); this.targetmethod(beanofcomparable, comparableobject); } } the invocation targetmethod(beanofcomparable, comparableobject) in last line generates
the method
targetmethod(bean<t>, t)in typegenericstestnot applicable arguments(bean<comparable<t>>, comparable<t>)
and don't understand problem is, since t in targetmethod must comparable<t>, type i'm giving it.
the constraint on targetmethod thing causing fail:
public <t extends comparable<t>> t targetmethod(bean<t> bean, t object) when pass in variables (bean<comparable<x>>, comparable<x>), implying generic parameter t comparable<x> (i'm using x here distinguish between generic targetmethod , generic understandgenerics).
the constraint on targetmethod says when t comparable<x>, t must extend comparable<comparable<x>>. of course, not going satisfied.
i think intend better accomplished so:
@suppresswarnings("unchecked") public <t extends comparable<t>> void understandgenerics(bean<t> bean, object object) { t comparable = (t) object; targetmethod(bean, comparable); } notice added constraint t must comparable, whole process simpler. in general, pays limit unchecked code as possible, , put constraints on types instead.
Comments
Post a Comment