Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generic Class with JavaPoet

Tags:

java

javapoet

Hey I'm trying to generate a class like this:

public abstract class ResourceListAdapter<T extends ResourceViewHolder> extends RecyclerView.Adapter<T> {}

At the moment I can generate:

public abstract class ResourceListAdapter extends RecyclerView.Adapter<?> {}

With following code:

TypeSpec type = TypeSpec.classBuilder(thisClass)
    .superclass(ParameterizedTypeName.get(adapterClassName, WildcardTypeName.subtypeOf(Object.class)))
    .addModifiers(Modifier.ABSTRACT, Modifier.PUBLIC)
    .build();

I'm also able to do something like this:

private ResourceListAdapter<? extends ResourceViewHolder> adapter;

With:

ParameterizedTypeName.get(thisClass,WildcardTypeName.subtypeOf(resourceViewHolderClassName));

But I'm not able to combine this. So do you have any ideas??

like image 273
Marcel Groß Avatar asked Dec 09 '16 16:12

Marcel Groß


1 Answers

I got a solution!

TypeSpec type = TypeSpec.classBuilder(thisClass)
            .superclass(ParameterizedTypeName.get(adapterClassName, TypeVariableName.get("T")))
            .addTypeVariable( TypeVariableName.get("T", resourceViewHolderClassName))

Will generate:

public abstract class ResourceListAdapter<T extends ResourceViewHolder> extends RecyclerView.Adapter<T> {}
like image 173
Marcel Groß Avatar answered Oct 19 '22 13:10

Marcel Groß