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

前端之家收集整理的这篇文章主要介绍了java – 基于内部类的类型参数的类型声明前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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?

外部和内部静态类之间没有关系(如继承或者一个字段).您可以像在示例中一样创建内部静态类的对象,而不需要对外部类进行任何依赖:

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相关文章