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的类型参数一样吗? 换句话说,可以将外部类的类型参数传递给内部类通用类型声明? 解决方法
外部和内部静态类之间没有关系(如继承或者一个字段).您可以像在示例中一样创建内部静态类的对象,而不需要对外部类进行任何依赖: 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 – 如何在spring数据mongo db中进行这种聚合?
- Spring ClassPathXmlApplicationContext类:创建容器
- java – 查找所有可能的枚举组合
- JSP header对象:获取HTTP请求的一个具体header值
- java – 为什么我们不能在throws异常的基础上重载一个方法呢
- 蚂蚁花呗Java开发岗:算法+SpringCloud+SpringBoot+Redis+M
- java – 密码保护的应用程序在tomcat中
- Eclipse中使用Maven创建Java Web工程的实现方式
- java – 将空值表示为xml jaxb中的空元素
- java – Word Base / Stem Dictionary