gpt4 book ai didi

java - 内部类中基于类型参数的类型声明

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:11:49 28 4
gpt4 key购买 nike

Java 有影子类型参数吗?我发现自己很难进行测试,因为 Java 泛型不会在运行时具体化。

例如,给定这段代码:

public class NestedGeneric<T> {
private InnerGeneric<T> innerGenericInstance;

private static class InnerGeneric<T> {
public T innerGenericField;
}

NestedGeneric() {
innerGenericInstance = new InnerGeneric<T>();
}
}

以下两个语句都可以正常编译:

NestedGeneric<Integer> test1 = new NestedGeneric<Integer>();
NestedGeneric.InnerGeneric<String> test2 = new NestedGeneric.InnerGeneric<String>();

NestedGeneric 被传递一个类型参数并调用其构造函数时,T 是什么?它是否总是与传递给 nestedGeneric 的类型参数相同?

换句话说,是否可以将外部类的类型参数传递给内部类的泛型类型声明?

最佳答案

In other words, I suppose the question is, can an outer classes type parameters be passed to an inner classes generic type declarations?

没有。外部和内部 static 类之间没有关系(如继承或作为字段)。您可以像示例中那样创建内部静态类的对象而不依赖于外部类:

NestedGeneric.InnerGeneric<String> test2  = new NestedGeneric.InnerGeneric<String>();

然而,当您使用内部类的实例作为字段时,泛型类型派生自外部类:

private InnerGeneric<T> innerGenericInstance;

innerGenericInstance = new InnerGeneric<T>();

第三种变体是将内部类定义为字段(非静态):

private class InnerGeneric<T> {
public T innerGenericField;
}

现在将从外部类获取类型,因为它是一个成员变量。

正如评论中所指出的那样,用类型定义内部静态和外部类只会让读者(以及稍后的你自己)感到困惑。它应该用不同的泛型来声明,比如

public class NestedGeneric<T> {
private InnerGeneric<T> innerGenericInstance;

private static class InnerGeneric<U> {
private U innerGenericField;
}

NestedGeneric() {
innerGenericInstance = new InnerGeneric<T>();
}
}

关于java - 内部类中基于类型参数的类型声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31052476/

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