<D extends com.j256.ormlite.dao.Dao<T,?>,T> D getDao(Class<T> clazz)
我无法理解上述陈述
getDao(Class clazz)返回D
D有以下约束
D extends com.j256.ormlite.dao.Dao<T,?>
和额外,T 我无法理解。
你能解释一下吗?
答案 0 :(得分:2)
此方法包含两个类型参数D
和T
,其中D
具有额外的extends
约束,具体取决于{{1 }}。不要对这个T
语法感到困惑; <T,?>,T
not 属于约束,但是第二个参数,告诉Java ,T
不是具体类的名称。
如果添加空格或交换参数,它将更清晰。这是一个类似但有点简单的例子。这些方法签名都是等效的:
T
请记住,尽管<D extends List<T>,T> D createListOf(Class<T> clazz) // your version
<D extends List<T>, T> D createListOf(Class<T> clazz) // extra space
<T, D extends List<T>> D createListOf(Class<T> clazz) // different order
似乎很明显是另一个类型参数,但Java并不清楚。可能有一个名为T
的实际类,因此我们必须明确T
是一个类型参数。
T
相反,类型参数不限于单个字符。如果您想彻底混淆同事,也可以使用名为class T { ... } // this T is not what I want!
的类型参数,甚至是Foo
。也许这表明为什么使用String
声明所有类型参数是必要的。
<...>
答案 1 :(得分:1)
此方法将:
D
D
是或com.j256.ormlite.dao.Dao
的位置,使用T
类型的对象或扩展/实施T
和未知类型参数进行参数化T
它使用了很多通用抽象,这并不奇怪,因为它提供了DAO(数据访问对象)。