有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java这两个通用函数之间有什么区别?

正如标题所说,我想知道这些函数之间的区别是什么。 为什么我应该/不应该在foo2中提供<T>

public class Base<T> {

    public T[] foo(int i){
        /*Do something*/

    }

    public <T> T[] foo2(int i){
        /*Do something*/
    }

}

共 (1) 个答案

  1. # 1 楼答案

    第二个函数的T隐藏了类的类型参数T。这意味着第二个函数中的T引用不同的类型T。这种命名很混乱,应该避免

    当然,如果您确实想要引用不同的泛型类型,您可以这样做,但是您应该以不同的方式命名类型参数。以下示例与您的示例相同,但不隐藏Base中定义的T

    public class Base<T> {
    
        public T[] foo(int i){
            /*Do something*/
    
        }
    
        public <S> S[] foo2(int i){
            /*Do something*/
        }
    }