方法声明语法

时间:2018-04-27 19:58:57

标签: java

我接管了一个项目并且遇到了编码风格我还没有多少工作。

任何人都可以解释这是如何工作的吗?特别是clazz争论。

public <T extends Enum<T>> void activateLink(
    final Class<? extends Enum<T>> clazz,  final T linkName )

3 个答案:

答案 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 - 在此处传递枚举Tnull的其中一个值。如果linkName不是null,您实际上不需要Class<? extends Enum<T>> clazz参数,只需要linkName.getClass()。因此,此代码可能假设linkName可以是null