1. Overview
1.概述
Generics in Java provide flexibility by allowing types to be parameters when defining a class, constructor, interface, or method. The @param tag is the standard tag to document generic type parameters when writing Java documentation.
Java中的泛型允许在定义类、构造函数、接口或方法时将类型作为参数,从而提供了灵活性。@param 标记是编写 Java 文档时记录泛型类型参数的标准标记。
In this tutorial, we’ll explore best practices for using the @param tag to document generic type parameters in Java.
在本教程中,我们将探讨使用 @param 标记记录 Java 中通用类型参数的最佳实践。
2. @param Tag
2. @param 标记
The @param tag is the standard tag to document parameters and generic type parameters for public methods, constructors, classes, etc.
@param 标记是记录公共方法、构造函数、类等的参数和通用类型参数的标准标记。
A good Javadoc comment must properly describe method parameters for easy comprehension. Here’s the basic basic syntax:
好的 Javadoc 注释必须正确描述方法参数,以便于理解。下面是基本的基本语法:
/**
* @param [parameter name] [parameter description]
*/
The syntax starts with the @param tag and a placeholder for the parameter name in a method or constructor signature. Finally, we have a placeholder to describe the purpose of the parameter.
语法以 @param 标记和方法或构造函数签名中参数名称的占位符开始。最后,我们还有一个占位符来描述参数的用途。
For generic type, there’s a slight change in the syntax:
通用类型的语法略有变化:
/**
* @param [<parameter type>] [parameter type description]
*/
The parameter type must be inside an angle bracket. Then, we describe the type parameter.
参数类型必须位于角括号内。然后,我们描述类型参数。
3. Using @param Tag With Generic Type
3.在通用类型中使用 @param 标记
Let’s see an example code that uses @param with a generic type parameter:
让我们来看一个使用 @param 和通用类型参数的示例代码:
/**
*
* @param <T> The type of the first value in the pair.
* @param <S> The type of the second value in the pair.
*/
class Pair<T, S> {
public T first;
public S second;
Pair(T a, S b) {
first = a;
second = b;
}
}
Here, we create a new generic class named Pair and define two types for the class. Next, we use the @param tag with the type parameter and then describe it.
在这里,我们创建了一个名为 Pair 的新泛类,并为该类定义了两种类型。接下来,我们使用 @param 标记来添加类型参数,然后对其进行描述。
Notably, the type parameter must be inside the angle bracket when documenting a generic class.
值得注意的是,在记录泛型类时,类型参数必须位于角括号内。
Moreover, let’s write Javadoc comments to describe the constructor parameters:
此外,让我们编写 Javadoc 注释来描述构造函数参数:
/**
* Constructs a new Pair object with the specified values.
*
* @param a The first value.
* @param b The second value.
*/
Pair(T a, S b) {
first = a;
second = b;
}
In the code above, we describe the constructor arguments using the @param tag. Unlike generic type parameters, the parameter name isn’t in angle brackets. This differentiates between type parameters and ordinary parameters when writing a Javadoc comment.
在上面的代码中,我们使用 @param 标记来描述构造函数参数。与通用类型参数不同的是,参数名称不在角括号内。这样在撰写 Javadoc 注释时,就可以区分类型参数和普通参数。
4. Possible Errors
4.可能出现的错误
There are chances for errors to occur while generating Javadoc for a generic type. First, forgetting to add the @param tag at the beginning of the Javadoc comment generates an unknown tag error:
在生成泛型的 Javadoc 时,有可能会发生错误。首先,如果忘记在 Javadoc 注释的开头添加 @param 标记,就会产生未知标记错误:
/**
* <T> The type of the first value in the pair.
* @param <S> The type of the second value in the pair.
*/
The above Javadoc comment generates an error message due to the missing @param tag in the first statement:
由于第一条语句中缺少 @param 标记,上述 Javadoc 注释生成了一条错误信息:
error: unknown tag: T * <T> The type of the first value in the pair
Next, an error can occur when we introduce the same or another type of parameter inside the description:
接下来,当我们在描述中引入相同或其他类型的参数时,可能会发生错误:
/**
* @param <T> The type of the first value in the Pair<T,S>.
* @param <S> The type of the second value in the Pair<T,S>.
*/
Here, we specify the generic class name in the description. However, the Javadoc generator treats the tag in the description as an HTML tag. Also, it expects a closing tag.
在这里,我们在描述中指定了通用类名。但是,Javadoc 生成器会将描述中的标记视为 HTML 标记。此外,它还希望有一个结束标记。
Here’s the error message:
下面是错误信息:
error: malformed HTML * @param <T> The type of the first value in the Pair<T,S>
Let’s solve this error by escaping the angle brackets:
让我们通过 删除角括号来解决这个错误:
/**
* @param <T> The type of the first value in the Pair<T,S>.
* @param <S> The type of the second value in the Pair<T,S>.
*/
Here, the angle brackets “<” and “>” are escaped as “<” and “>” respectively to avoid HTML parse error.
这里,角括号”<“和”>“分别转义为”< “和”>“,以避免 HTML 解析错误。
Alternatively, we can solve this error by using the @code tag in our description:
或者,我们可以在描述中使用 @code 标记来解决这个错误:
/**
* @param <T> The type of the first value in the {@code Pair<T,S>}.
* @param <S> The type of the second value in the {@code Pair<T,S>}.
*/
Using the @code tag looks cleaner and well-suited for this use case.
使用 @code 标记看起来更简洁,非常适合这种使用情况。
5. Conclusion
5.结论
In this article, we learned how to document generic type parameters using the @param tag. Additionally, we saw the possible errors we may encounter and how to solve them.
在本文中,我们学习了如何使用 @param 标记记录通用类型参数。此外,我们还了解了可能遇到的错误及解决方法。
As always, the complete source code for the example is available over on GitHub.
一如既往,该示例的完整源代码可在 GitHub 上获取。