I'm creating an interface of JOOQ TableRecord
<R extends TableRecord<R>>
Would anyone be able to explain the line above?
Thanks
It means a class of type R, that implements the interface TableRecord<R>
TableRecord<R>
means that the interface is bound to the same type R.
An example would be a class like:
public class Bla implements TableRecord<Bla>
I admit this seems a bit strange, but Java generics don't really differentiate between extends
and implements
, which leads to some confusion.
As to why this exact definition, I don't know enough about the context to see exactly why it makes sense, but it might be due to method signatures on the interface returning objects of type R
(think Factory):
public R createTableRecord(...);
class SomeClass<R extends TableRecord<R>>
What it means that parameter type R
has to be a subclass of TableRecord <R>
and nothing else, i.e. you must use class
class Foo extends TableRecord <Foo>
as the parameter for defining your class SomeClass
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With