以下两种方法的签名有什么区别?
public static <T> ReturnContainer test(Class<T> incomingClass)
{
List<TestTuple<T>> tupelo = new ArrayList<TestTuple<T>>();
ReturnContainer rc = new ReturnContainer(tupelo, incomingClass);
return rc;
}
要求返回类型<T> ReturnContainer
以上与<T> ReturnContainer<T>
之间有什么区别?
public static <T> ReturnContainer<T> test(Class<T> incomingClass)
{
List<TestTuple<T>> tupelo = new ArrayList<TestTuple<T>>();
ReturnContainer rc = new ReturnContainer<T>(tupelo, incomingClass);
return rc;
}
答案 0 :(得分:3)
好吧,如果ReturnContainer是一个泛型类,我假设它来自你的例子,不建议使用像第一个例子中那样的原始类型,因为它不是类型安全的。
例如,您可能会有以下内容:
ReturnContainer<String> container = test(Integer.class);
这会起作用(但会产生警告),因为返回类型是原始类型。 然后,当你试图从容器中获取某些内容时,编译器会认为它是一个String,但它实际上是一个Integer,你会得到一个ClassCastException。
编辑:查看上一个问题后
你需要告诉我们ReturnContainer是否首先有一个类型参数,或者类的重点是什么。 <T>
参数对于Lists或Maps之类的容器类很有用,因为它直接告诉您它包含的对象类型,而不是承载对象,并允许您在从容器中检索它们时将它们转换为任何对象。它们提供额外的安全性。您确定List<String>
保证只包含字符串,而get
和add
方法只返回/接受字符串。如果您的容器具有类似的行为,那么它应该具有类型参数,您应该使用第二种方法。
答案 1 :(得分:0)
编辑以更好地回答您的问题,并删除了c#版本:)
通过返回ReturnContainer,您将提供有关返回的内部对象类型的信息。
通过仅传递有关传入类的信息,您不会提供有关ReturnContainer的信息,或者其中的元素 - 只是参数是T类型。