<T>(尖括号)在Java中是什么意思?

2022-08-31 07:20:45

我目前正在学习Java,最近被尖括号(<>)所困扰。它们到底是什么意思?

public class Pool<T>{
    public interface PoolFactory<T>{
        public T createObject();
    }
    this.freeObjects = new ArrayList<T>(maxsize)
}

这是什么意思?这是否意味着我可以创建一个类型的对象?<T>T


答案 1

<T>泛型,通常可以读作“T 型”。这取决于<>左侧的类型。

我不知道什么是a or,但你也提到,这是一个标准的Java类,所以我会谈谈它。PoolPoolFactoryArrayList<T>

通常,您不会在那里看到“T”,您会看到另一种类型。因此,如果您看到例如,这意味着“An of s”。例如,许多类使用泛型来约束容器中元素的类型。另一个例子是 ,意思是“具有键和值的映射”。ArrayList<Integer>ArrayListIntegerHashMap<String, Integer>StringInteger

Pool 示例略有不同,因为您正在定义一个类。因此,在这种情况下,您正在创建一个类,其他人可以使用特定类型代替 T 来实例化该类。例如,我可以使用您的类定义创建一个类型的对象。这意味着两件事:Pool<String>

  • 我将有一个接口,其中包含返回s的方法。Pool<String>PoolFactory<String>createObjectString
  • 在内部,将包含一个字符串。Pool<String>ArrayList

这是个好消息,因为在另一个时候,我可以创建一个使用相同的代码,但是在源代码中看到的任何地方。Pool<Integer>IntegerT


答案 2

这真的很简单。这是 J2SE 5 中引入的新功能。在类名后指定角括号意味着您正在创建一个可以保存任何类型数据的临时数据类型。

例:

class A<T>{
    T obj;
    void add(T obj){
        this.obj=obj;
    }
    T get(){
        return obj;
    }
}
public class generics {
    static<E> void print(E[] elements){
        for(E element:elements){
            System.out.println(element);
        }
    }

    public static void main(String[] args) {
        A<String> obj=new A<String>();
        A<Integer> obj1=new A<Integer>();
        obj.add("hello");
        obj1.add(6);
        System.out.println(obj.get());
        System.out.println(obj1.get());

        Integer[] arr={1,3,5,7};
        print(arr);
    }
}

而不是 ,你实际上可以写任何东西,它将以同样的方式工作。尝试用 代替 写字。<T><ABC><T>

这只是为了方便:

  • <T>称为任何类型
  • <E>作为元素类型
  • <N>作为数字类型
  • <V>作为值
  • <K>作为键

但是你可以给它起任何你想要的名字,这并不重要。

此外,、 、 等是 Java 的包装类,有助于在编译过程中检查类型。例如,在上面的代码中,是 类型 ,因此您无法向其添加任何其他类型(尝试,它将强制执行错误)。同样,是该类型,您无法向其添加任何其他类型(尝试,错误将在那里)。IntegerStringBooleanobjStringobj.add(1)obj1Integerobj1.add("hello")


推荐