What does <R extends TableRecord<R>> mean in Java?

◇◆丶佛笑我妖孽 提交于 2020-01-01 03:23:25

问题


I'm creating an interface of JOOQ TableRecord

<R extends TableRecord<R>> 

Would anyone be able to explain the line above?

Thanks


回答1:


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(...);



回答2:


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



来源:https://stackoverflow.com/questions/18892061/what-does-r-extends-tablerecordr-mean-in-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!