Quantcast
Channel: Blog
Viewing all articles
Browse latest Browse all 19

Generic Java class with a method that returns an object of the same generic type

$
0
0

I’ve been doing a little development generify some Java classes to make them reusable across a couple of web applications and wanted to share this neat trick I learned along the way.

Method that returns an object of the same class and type arguments as the callee

I think this is a fairly common requirement for example when you have an object that replaces another.  A contrived example


class Magazine {
    Magazine nextEdition;
    Magazine nextEdition()  {
        return this.nextEdition;
    }
}

For some reason you want to make this class generic by genre.


interface Genre {
}
class Magazine<G extends Genre> {
}

How do you ensure nextEdition() returns the same genre?  The answer is to add an additional generic type parameter that references itself


class Magazine<M extends Magazine<M, G>, G extends Genre> {
    M nextEdition;
    M nextEdition()  {
        return this.nextEdition;
    }
}

Not obvious, a little verbose, but it works!


Viewing all articles
Browse latest Browse all 19

Trending Articles