gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:39:53 24 4
gpt4 key购买 nike

我有一个调用通用方法的方法,该方法针对某些类型的特殊行为进行实例化:

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 替换为 Object。据我所知,没有解决方法。您可以找到有关类型删除的更多信息 here .

编译后您的代码将如下所示:

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);
}

关于java - 调用中间泛型方法时如何保留类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34837020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com