java - How can pass my class to the generic specification of the class? -
i have following method signature
public abstract class abstractfilterparameterswithspecificationsorting<t> extends abstractfilterparameters ... public void registerorderspecification( final string key, final class<? extends orderspecification<t>> spec ) { ... i'm passing following
this.registerorderspecification( abstractactivitylogwithsiteuser.index.user_full_name, sortactivityloguserorderspecification.class ); which has class definition
public class sortactivityloguserorderspecification<al extends abstractactivitylogwithsiteuser<?>> extends abstractorderspecification<al> implements orderspecification<al> here's javac doesn't (idea thinks should work, idea running on java 8, , code must compile on java 7)
error:(12, 21) java: method registerorderspecification in class com.myapp.service.principal.abstractfilterparameterswithspecificationsorting<t> cannot applied given types; required: java.lang.string,java.lang.class<? extends com.myapp.specification.orderspecification<al>> found: java.lang.string,java.lang.class<com.myapp.repository.activitylog.specification.sortactivityloguserorderspecification> reason: actual argument java.lang.class<com.myapp.repository.activitylog.specification.sortactivityloguserorderspecification> cannot converted java.lang.class<? extends com.myapp.specification.orderspecification<al>> method invocation conversion can cast it? or missing question mark somewhere?
i tried code , started simplifying smaller example showed same problem. got (much simpler) code:
abstract class mylist<t> implements java.util.list<t> { } public class testgenerics2<t> { public void processlistclass(final class<? extends java.util.list<t>> spec ) { } public void tryit() { this.processlistclass(mylist.class); } } generates error:
testgenerics2.java:11: processlistclass(java.lang.class<? extends java.util.list<t>>) in testgenerics2<t> cannot applied (java.lang.class<mylist>) i think should cast (or refactor code don't need generic's complexity).
like jon skeet once said:
sometimes java generics doesn't let want to, , need tell compiler you're doing legal @ execution time.
Comments
Post a Comment