gpt4 book ai didi

java - 稍后在 Java 代码中定义实例泛型类型

转载 作者:行者123 更新时间:2023-12-01 12:37:44 24 4
gpt4 key购买 nike

我有一堂这样的课:

public class Foo<T>
{
//What ever inside
}

后来我想做这样的事情:

public class MyClass
{
Foo foo;
public MyClass(int x)
{
if(x==1)
{
foo = new Foo<Integer>();
//EDIT1
handleFooWhenItIsInteger();
//EDIT1
}
else
{
foo = new Foo<String>();
//EDIT1
handleFooWhenItIsString();
//EDIT1
}
}

假设我在函数“handleFooWhenItIsInteger()”中执行一些整数操作,并在另一个函数中执行一些字符串操作。

像上面那样定义“foo”可以吗?

最佳答案

但是,这将编译 raw types 的使用比如

Foo foo;

对于您的通用类型 Foo<T>感到气馁。仅出于遗留原因才支持原始类型,即与引入泛型的 Java 5 之前编写的代码兼容。

为了描述任何通用的 Foo,你应该写 Foo<?>它描述了 Foo 的一个实例任何泛型类型。然后,编译器将检查您是否稍后在代码中对这些实例调用任何非类型安全方法,例如在您的情况下,该实例可以引用 Foo<Integer>Foo<String> 。感谢使用通配符类型 Foo<?> ,您可以使用相同的变量引用两者,但您不能再对引用实例的实际泛型类型做出假设。

从技术上讲,使用 Foo 没有太大区别或Foo<?> 。但是,使用前者,编译器将生成使用原始类型的警告。编译器无法确定您是否忘记添加泛型类型参数而只是意外地使用了原始类型。这就是为什么您应该花几个字符来始终添加 <?>如果您需要通配符引用。

关于java - 稍后在 Java 代码中定义实例泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25426598/

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