Java泛型类型参数命名约定范围

Java泛型类型参数命名约定范围,java,generics,naming-conventions,Java,Generics,Naming Conventions,表示当存在多个通用参数时,约定为第2、第3、第4种类型使用S、U、V等。此约定是否适用于一个封闭的组的范围,还是适用于一个类 例如,如果我有一个类,它有两个使用不同泛型参数的独立方法,那么上述约定是否意味着我应该这样编写代码: public abstract class MyClass { public abstract <T extends Class1> T method1(); public abstract <S extends Class2> S

表示当存在多个通用参数时,约定为第2、第3、第4种类型使用S、U、V等。此约定是否适用于一个封闭的
组的范围,还是适用于一个类

例如,如果我有一个类,它有两个使用不同泛型参数的独立方法,那么上述约定是否意味着我应该这样编写代码:

public abstract class MyClass
{
    public abstract <T extends Class1> T method1();
    public abstract <S extends Class2> S method2();
}
public abstract class MyClass
{
    public abstract <T extends Class1> T method1();
    public abstract <T extends Class2> T method2();
}
公共抽象类MyClass
{
公开摘要T方法1();
公开摘要S方法2();
}
或者像这样:

public abstract class MyClass
{
    public abstract <T extends Class1> T method1();
    public abstract <S extends Class2> S method2();
}
public abstract class MyClass
{
    public abstract <T extends Class1> T method1();
    public abstract <T extends Class2> T method2();
}
公共抽象类MyClass
{
公开摘要T方法1();
公开摘要T方法2();
}

第二种肯定更为传统。如果您有一个带有泛型方法的大型实用程序类,那么第一种模式将不起作用


我们可以在openjdk和流行的库(如guava类)中看到这样的例子。注意,在大多数方法中,它们都重复使用T作为类型变量。这允许其他标识符(如E、K、V等)保留一些语义含义。

第二种方法肯定是这样。约定是在相同范围内区分类型,类似于索引变量的
i
j
约定。不确定是否有约定,但我个人更喜欢第一种约定。更不可能有人在您之后阅读代码并感到困惑。那么基于意见吗?@markspace如果您觉得这样,您是否也觉得方法的参数名在整个类中应该是唯一的?其实是一样的。方法参数名。本地类型参数名称。--如果您有10多个这样的通用方法,您会使用开始命名它们
AA
AB
,等等吗?请参阅。所有静态工厂方法都是不相关的,它们都以
T
开头,表示“类型”(尽管它们使用
U
作为第二种类型,但其他字母都是从它们的角色派生的)。