加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:55:52 所属栏目:Java 来源:网络整理
导读:Java影子类型参数?我发现很难测试自己,因为Java泛型在运行时没有得到认可. 例如,给出这个代码: public class NestedGenericT { private InnerGenericT innerGenericInstance; private static class InnerGenericT { public T innerGenericField; } NestedG
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>();
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读