public static <T> T addAndReturn(T element, Collection<T> collection){
collection.add(element);
return element;
}
我不理解为什么这个方法需要使用<T>
。
另外,泛型方法和使用泛型语法的方法有什么区别?
public static <T> T addAndReturn(T element, Collection<T> collection){
collection.add(element);
return element;
}
我不理解为什么这个方法需要使用<T>
。
另外,泛型方法和使用泛型语法的方法有什么区别?
> public static <T> T addAndReturn(T
> element, Collection<T> collection){
> collection.add(element);
> return element; }
<T>
(尖括号中的)被称为通用类型参数,而直接位于方法名称之前的T
是返回类型。您可能有一个通用方法,它返回与通用类型不同的某些其他类型。也许您想要一个将元素添加到集合中的方法(因此是T
类型的对象),而不是返回已添加的对象(这也将是T
类型的),您希望它返回该项目在集合中的索引,该索引始终为int类型。<T>
int addElement(T element, List list)public static <T> Integer addAndReturn(T element, Collection<T> collection)
通用方法与其他方法一样,可以具有任何返回类型,包括泛型本身、任何其他类类型、任何基本或固有数据类型或void。当你认为它们是相关联的时候,你可能会混淆方法签名的两个不相关部分。在这种情况下,它们只是“相关”的意思是,如果您使用T作为返回类型,则返回值的类型是您在调用站点提供的通用类型。
使用 object 而不是 T 作为返回值类型,将导致函数返回 object。
当它返回 T 时,您可以执行以下操作:
addAndReturn(myElement, col).SomeMethodOfMyElement();
((MyElementType)addAndReturn(myElement, col)).SomeMethodOfMyElement();
addAndReturn(myElement, col);
myElement.SomeMethodOfMyElement;
需要两个语句而不是一个语句。
编辑:现在你的问题已经格式化,我看到其中一个参数是Collection<T>
。在这种情况下,泛型语法确保
addAndReturn(mySquare, collectionOfCircles);
返回编译时错误而不是运行时错误。
编辑:如果你的问题是关于<T>
语法而不是关于通用性的使用,那么<T>
告诉编译器方法定义中使用的T
不是某个类T,而是一个占位符,用于特定调用该方法的任何类“适合”。
这里的泛型 T 只是一个占位符,用于表示实际返回的更具体的类型。在你提供的情况下,T 是你要添加到集合中的元素的类型。
Collection<int> intCollection = new Collection();
int addedInt = addAndReturn(5, intCollection);
addedInt == 5;
由于它们都是 T 而不是 T1 或 T2,显然需要一个单一类型的对象作为要求,因为该函数将类型添加到通用集合中。
T被用于多态的原因,如果我们这样说的话。T是任何类型的类Type。
也就是说,如果你有一个Customer类,你可以使用上述方法来处理你的用户类型Customer类。T允许你放入任何你想要的类型。
T将允许你为自己定义的用户类型使用这个通用方法,就像它为值类型或任何其他类型做的那样。T成为元素参数中指定的类型。