繁体   English   中英

调用中间泛型方法时如何保留类类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM