![](/img/trans.png)
[英]How can I return a list of a certain type when calling a generic method that accepts a Class<T> and returns a T?
[英]How to preserve class type when calling intermediate generic method
我有一个调用通用方法的方法,该方法针对某些类型的特殊行为实例化:
public static void generic_direct(String s)
{
System.out.println("YOU SUBMIT STRING: premium class");
}
public static <T> void generic_direct(T t)
{
System.out.println("YOU SUBMIT GENERIC: second class");
}
System.out.println("TEST STRING ?");
generic_direct("what ?");
System.out.println("TEST INTEGER ?");
generic_direct(12345);
提供所需的行为:
TEST STRING ?
YOU SUBMIT STRING: premium class
TEST INTEGER ?
YOU SUBMIT GENERIC: second class
但是当通过另一个通用方法调用它时,您会丢失类类型
public static <T> void generic_indirect(T t)
{
generic_direct(t);
}
System.out.println("TEST STRING ?");
generic_indirect("what ?");
System.out.println("TEST INTEGER ?");
generic_indirect(12345);
给这个:
TEST STRING ?
YOU SUBMIT GENERIC: second class
TEST INTEGER ?
YOU SUBMIT GENERIC: second class
那么有可能吗?如何在使用中间泛型方法时保留类类型,而不必实例化具有可能类型的每个中间方法?
通过使用generic_indirect(T)方法,您将失去类型安全性,因为Java编译器将使用对象替换泛型T。 据我所知,目前尚无解决方法。 您可以在此处找到有关类型擦除的更多信息。
编译后,您的代码将如下所示:
public static void generic_direct(String s)
{
System.out.println("YOU SUBMIT STRING: premium class");
}
public static void generic_direct(Object t)
{
System.out.println("YOU SUBMIT GENERIC: second class");
}
public static void generic_indirect(Object t)
{
// will resolve it to generic_direct(Object)
generic_direct(t);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.