猿问

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

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

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

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

是什么<T>刻薄?这是否意味着我可以创建一个类型为T?


胡说叔叔
浏览 1565回答 3
3回答

千巷猫影

<T>是属属通常可以理解为“T型”。它取决于<>的左边的类型,它实际上意味着什么。我不知道Pool或PoolFactory但你也提到ArrayList<T>,这是一个标准的Java类,因此我将讨论这个问题。通常,你不会在里面看到“T”,你会看到另一种类型。所以如果你看到ArrayList<Integer>例如,意思是“ArrayList的Integer例如,许多类使用泛型来约束容器中元素的类型。HashMap<String, Integer>,意思是“一张地图String钥匙和Integer价值。“您的池示例有点不同,因为您在这里定义一堂课。因此,在这种情况下,您正在创建一个类,其他人可以用特定类型实例化类来代替T。例如,我可以创建一个类型为Pool<String>使用您的类定义。这意味着两件事:我的Pool<String>会有一个接口PoolFactory<String>带着createObject方法返回StringS.内部,Pool<String>会包含一个ArrayList弦乐乐队。这是个好消息,因为在另一个时间,我可以来创建一个Pool<Integer>它将使用相同的代码,但是Integer无论你看到什么T在源头。

收到一只叮咚

它与java中的泛型有关。如果我提到ArrayList<String>这意味着我只能向该ArrayList添加字符串类型对象。Java中泛型的两个主要好处是:减少程序中的强制转换数量,从而减少程序中潜在错误的数量。提高代码清晰度

潇湘沐

真的很简单。中引入的一个新特性J2SE 5..在类名之后指定角括号意味着要创建一个临时数据类型,它可以容纳任何类型的数据。例子:class&nbsp;A<T>{ &nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;obj; &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;add(T&nbsp;obj){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.obj=obj; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;T&nbsp;get(){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;obj; &nbsp;&nbsp;&nbsp;&nbsp;}}public&nbsp;class&nbsp;generics&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;static<E>&nbsp;void&nbsp;print(E[]&nbsp;elements){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(E&nbsp;element:elements){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(element); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A<String>&nbsp;obj=new&nbsp;A<String>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A<Integer>&nbsp;obj1=new&nbsp;A<Integer>(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj.add("hello"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;obj1.add(6); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(obj.get()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(obj1.get()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Integer[]&nbsp;arr={1,3,5,7}; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(arr); &nbsp;&nbsp;&nbsp;&nbsp;}}而不是<T>,你实际上可以写任何东西,而且它的工作方式也是一样的。试着写作<ABC>代替<T>.这只是为了方便:<T>被称为任何类型<E>As元素类型<N>AS型<V>作为价值<K>作为关键但你可以给它起任何你想要的名字,这并不重要。此外,Integer,&nbsp;String,&nbsp;BooleanETC是Java的包装类,它有助于在编译期间检查类型。例如,在上面的代码中,obj是类型的String,所以您不能向它添加任何其他类型(尝试obj.add(1),会造成错误)。同样,obj1是Integer类型,您不能向它添加任何其他类型(尝试obj1.add("hello"),错误就会出现)。
随时随地看视频慕课网APP

相关分类

Java
我要回答