Java 两者之间的差异:<;T>;ReturnContainer测试()和:<;T>;返回集装箱<;T>;test()?

Java 两者之间的差异:<;T>;ReturnContainer测试()和:<;T>;返回集装箱<;T>;test()?,java,generics,Java,Generics,下面两种方法的签名有什么区别 public static <T> ReturnContainer test(Class<T> incomingClass) { List<TestTuple<T>> tupelo = new ArrayList<TestTuple<T>>(); ReturnContainer rc = new ReturnContainer(tupelo, incomingClass);

下面两种方法的签名有什么区别

public static <T> ReturnContainer test(Class<T> incomingClass)
{
    List<TestTuple<T>> tupelo = new ArrayList<TestTuple<T>>();
    ReturnContainer rc = new ReturnContainer(tupelo, incomingClass);
    return rc;
}
公共静态返回容器测试(类别incomingClass)
{
List tupelo=new ArrayList();

ReturnContainer rc=新的ReturnContainer(tupelo,incomingClass); 返回rc; }
要求返回类型为上面的
ReturnContainer
与下面的
ReturnContainer
有什么区别?

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;
}
公共静态返回容器测试(类别incomingClass)
{
List tupelo=new ArrayList();

ReturnContainer rc=新的ReturnContainer(tupelo,incomingClass); 返回rc; }
好吧,如果ReturnContainer是一个泛型类,我假设它来自您的示例,那么不建议像第一个示例中那样使用原始类型,因为它不是类型安全的

例如,您可能有如下内容:

ReturnContainer<String> container = test(Integer.class);
ReturnContainer=test(Integer.class);
这会起作用(但会产生警告),因为返回类型是原始类型。 然后,当您试图从容器中获取某些内容时,编译器会认为它是一个字符串,但实际上它是一个整数,您会得到一个ClassCastException

编辑:在看了前面的问题之后


您首先需要告诉我们ReturnContainer是否有类型参数,或者类的作用是什么。
参数对于列表或映射之类的容器类很有用,因为它直接告诉您它包含什么类型的对象,而不是在从容器中检索对象时携带对象并将其强制转换为任何对象。它们提供额外的类型安全性。您肯定知道
列表
保证只包含字符串,而
get
add
方法只返回/接受字符串。如果您的容器有类似的行为,那么它应该有一个类型参数,您应该使用第二个方法。

好吧,如果ReturnContainer是一个泛型类,我假设它来自您的示例,那么不建议像第一个示例中那样使用原始类型,因为它不是类型安全的

例如,您可能有如下内容:

ReturnContainer<String> container = test(Integer.class);
ReturnContainer=test(Integer.class);
这会起作用(但会产生警告),因为返回类型是原始类型。 然后,当您试图从容器中获取某些内容时,编译器会认为它是一个字符串,但实际上它是一个整数,您会得到一个ClassCastException

编辑:在看了前面的问题之后


您首先需要告诉我们ReturnContainer是否有类型参数,或者类的作用是什么。
参数对于列表或映射之类的容器类很有用,因为它直接告诉您它包含什么类型的对象,而不是在从容器中检索对象时携带对象并将其强制转换为任何对象。它们提供额外的类型安全性。您肯定知道
列表
保证只包含字符串,而
get
add
方法只返回/接受字符串。如果您的容器有类似的行为,那么它应该有一个类型参数,您应该使用第二种方法。

编辑以更好地回答您的问题,并删除了c版本:)

通过返回ReturnContainer,您可以提供有关返回的内部对象类型的信息


通过只传递有关传入类的信息,您并没有提供有关ReturnContainer本身或其中元素的信息—只是参数的类型为T。

经过编辑以更好地回答您的问题,并删除了c版本:)

通过返回ReturnContainer,您可以提供有关返回的内部对象类型的信息


通过只传递有关传入类的信息,您并没有提供有关ReturnContainer本身或其中元素的信息,只是参数的类型是T。

您以前已经问过这个问题。你为什么不重新编辑上一个问题?完全重复:ReturnContainer rc=新ReturnContainer是否正确?它不应该是ReturnContainer rc=new ReturnContainer吗?您以前问过这个问题。你为什么不重新编辑上一个问题?完全重复:ReturnContainer rc=新ReturnContainer是否正确?它不应该是ReturnContainer rc=new ReturnContainer吗?是的,它们将编译,您可以使用泛型类型参数声明一个方法。您的版本未编译:
令牌语法错误“哈哈,把它读成一个C#问题。我的坏:)我已经删除了我的小疯狂时刻-基本的解释站得住脚,但现在看来你已经涵盖了这一点。是的,他们将编译,你可以声明一个带有泛型类型参数的方法。您的版本未编译:
标记“LOL”上的语法错误。请将其作为C#问题阅读。我的错误:)我已经删除了我的小疯狂时刻-基本解释站得住脚,但您现在似乎已经涵盖了这一点。