我接管了一个项目并且遇到了编码风格我还没有多少工作。
任何人都可以解释这是如何工作的吗?特别是clazz争论。
public <T extends Enum<T>> void activateLink(
final Class<? extends Enum<T>> clazz, final T linkName )
答案 0 :(得分:2)
Class<? extends Enum<T>> clazz
我猜你被问号困惑了?它只是意味着扩展Enum&#34;的东西。它作为通配符通用。
答案 1 :(得分:1)
假设你有enum
这样:
enum Sex { Male, Female }
我不确定
T extends Enum<T>
的含义
这意味着T
必须是扩展Enum<T>
的类型。
T
是泛型类型参数。如果你不了解泛型,你需要先阅读,例如The Java™ Tutorials
仅enum
种类型扩展Enum
,例如Sex
隐式扩展Enum<Sex>
,因此它基本上表示T
必须是enum
。
我不确定
Class<? extends Enum<T>> clazz
的含义
它表示对Class
类型的对象的引用,用于扩展?
的某些内容(Enum<T>
)。
这与T
不同,但T
的类型(&#34;类&#34;)。
由于枚举是隐式最终的,因此只能表示枚举本身的类,例如: Sex.class
。
以下是该方法的示例调用:
activateLink(Sex.class, Sex.Male)
此处,T
类型参数是实际类型Sex
,这意味着该方法等同于:
public void activateLink(final Class<? extends Enum<Sex>> clazz, final Sex linkName)
仅供参考:除非第二个参数可以是null
(不太可能),否则clazz
需要linkName.getClass()
是多余的,因为您始终可以通过调用pd.concat([df,df.Colors.str.get_dummies(sep=', ')],1)
Out[450]:
Item Colors Blue Green Red
0 ID-1 Red,Blue,Green 1 1 1
1 ID-2 Red,Blue 1 0 1
2 ID-3 Blue,Green 1 1 0
3 ID-4 Blue 1 0 0
4 ID-5 Red 0 0 1
来获取该参数
答案 2 :(得分:1)
<T extends Enum<T>>
表示您的泛型方法使用扩展T
的类型变量Enum<T>
进行参数化。基本上,你有一个类型参数T
,这只是一些枚举。
Class<? extends Enum<T>> clazz
是你的枚举类。 ? extends Enum<T>
表示“某种类型延伸Enum<T>
我们不知道或不关心”。泛型的问题是它们被删除了,所以有时如果你真的需要知道类型变量的类,你必须明确地传递它。
但是,在这种情况下,clazz
实际上只能是Class<T>
。因为除Enum<T>
之外没有其他类型扩展T
。
final T linkName
- 在此处传递枚举T
或null
的其中一个值。如果linkName
不是null
,您实际上不需要Class<? extends Enum<T>> clazz
参数,只需要linkName.getClass()
。因此,此代码可能假设linkName
可以是null
。