我感到困惑,当我遇到这类的一般方法。什么是公共静态<T>牛逼addAndReturn使用<T>(T元素,集合<T>集合){
public static <T> T addAndReturn(T element, Collection<T> collection){
collection.add(element);
return element;
}
我不明白为什么<T>
在此方法中是必需的。
此外,泛型方法和使用泛型语法的方法有什么区别?
我感到困惑,当我遇到这类的一般方法。什么是公共静态<T>牛逼addAndReturn使用<T>(T元素,集合<T>集合){
public static <T> T addAndReturn(T element, Collection<T> collection){
collection.add(element);
return element;
}
我不明白为什么<T>
在此方法中是必需的。
此外,泛型方法和使用泛型语法的方法有什么区别?
替代方法是,使用对象而不是T,会导致函数返回对象。
当它返回T,你可以这样做:
addAndReturn(myElement, col).SomeMethodOfMyElement();
如果addAndReturn返回的对象,而不是,你就必须为使用
((MyElementType)addAndReturn(myElement, col)).SomeMethodOfMyElement();
这需要一个明确的转换,或
addAndReturn(myElement, col);
myElement.SomeMethodOfMyElement;
需要两条语句而不是一条语句。
编辑:现在你的问题已经被格式化,我看到的参数之一是Collection<T>
。在这种情况下,通用语法确保:
addAndReturn(mySquare, collectionOfCircles);
返回编译时错误而不是运行时错误。
编辑:以防万一你的问题是关于<T>
语法,而不是关于使用一般的仿制药组成:<T>
告诉编译器在方法定义中使用的T
是不一些T类而是一个占位符,用于任何适合于特定方法调用的类。
感谢您的最近编辑评论。那是我的问题是关于。 我需要知道的是这个。 以下代码片段对编译器有什么影响吗?如果是这样,怎么样? 1.公共静态
对不起。我这次也错过了我的格式。 你能让我知道如何格式化我的代码? – 2009-11-04 06:41:33
在第二个变体中,编译器认为您正在创建一个返回类T的函数,即文字“T”,如“class T {...}”中所示。在第一个变体中,您正在创建一个适用于* all *类的函数:如果您传递一个整数和一个集合
这是一个泛型T只是返回的更具体类型的占位符。在提供T的情况下,您是要添加到集合中的元素的类型。
Collection<int> intCollection = new Collection();
int addedInt = addAndReturn(5, intCollection);
addedInt == 5;
因为都是T而不是T1或T2它们必须是作为一个单一的类型显然需要相同类型的对象,因为函数增加了一个类型到一个通用的集合
因为这是java,我希望你的意思是集合
T被用于多态的原因,如果我们可以这样说。 T是任何类型的类。例如,如果你有一个Customer类,你可以使用上面提到的方法来处理你的用户类型Customer类。 T允许你放置任何你想要的类型。
T将允许您为您自己的用户定义类型使用此泛型方法,就像它将为值类型或任何其他类型使用一样。 T成为元素参数中指定的类型。
该方法返回相同的输入element
可能是因为预期实施者使用Fluent Interface喜欢的方式提供一个更可读的API:
addAndReturn(myElement, col).doElementStuff().doOtherElementStuff();
Here你对Java泛型,我觉得完全和启发性的一个很好的教程。
> public static <T> T addAndReturn(T
> element, Collection<T> collection){
> collection.add(element);
> return element; }
的<T>
(在尖括号)被称为一般类型参数,而直接T
前述方法名是返回类型。你可能有一个泛型方法返回一些其他类型而不是泛型类型。也许你想要一个向元素添加一个元素的方法(所以类型为T
的对象),而不是返回添加的对象(它也是类型T
),你希望它返回该元素的索引收集,这将永远是一个整数。
其中返回类型不是一般类型实施例方法的签名:
public static <T> Integer addAndReturn(T element, Collection<T> collection)
通用方法,像任何其他方法,可以具有任何返回类型,包括通用类型本身,任何其他类型,任何基本或固有的数据类型,或无效。你可能会混淆方法签名的两个无关部分,认为它们是依赖的,而当它们不是时。它们只是“从属”的,因为如果您使用做,则使用T作为返回类型,返回值的类型是您在呼叫站点提供的通用类型。
请在提交问题前阅读格式指南。他们很难错过。 – Joe 2009-11-03 16:24:44
尝试将代码示例格式化为代码 – NDM 2009-11-03 16:25:00
@Joe,@Nicky De Maeyer:我修复了格式问题并删除了PS。 – Asaph 2009-11-03 16:26:27