很绕的标题,不过我tm确实不知到咋表达合适。主要来讲就是原来看thinking in java的时候有一个一直没理解的地方。后来又忘问了,今天下午在看一篇文章时突然想起来。
问题很简单类似
abstract class SomeType<E extends SomeType<E>> {
E f();
}
的签名,表示什么意思??
这种类型第一次出现在Thinking in java 4th,Generic那章。今天在找一个关于Enum的问题时又看到。
这种签名表示的确切意思有:
1.首先,E是SomeType的子类型
2.所有SomeType的子类型,都必须可以添加一个type parameter
3.前面两点说明,SomeType的子类型必须把自己作为type parameter.比如继承时
class MoreSpecificType extends SomeType<MoreSpecificType>{
MoreSpecificType f(){
.....
}
}
4.综合上面三点,对f()返回值的限制就是,必须是SomeType的当前子类型。比如
上面的例子。
作用:
这种写法的主要可以用来写出可以返回具体实现类类型的abstract factory.
也可以实现类似Generator模式(让编译时把泛型信息记录下来的一种模式,应该只有擦除式泛型的语言才有用)
如果有用过Enum,Enum源码中写法也类似:
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable {
....
}
分享到:
相关推荐
【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照
java 泛型类的类型识别示例 java 泛型类的类型识别示例 java 泛型类的类型识别示例
泛型类、泛型方法、泛型接口、泛型委托 泛型类、泛型方法、泛型接口、泛型委托
4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip4.java泛型的限制.zip...
C#用泛型比较各种数据类型,可扩展性强,
泛型:就是在定义类,接口时指定类型形参, 这个类型形参将在声明变量,创建对象时确定(即实际传入的类型参数,也称为类型实参)
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
Java 运行时如何获取泛型参数的类型 Java类型Type 之 ParameterizedType,GenericArrayType,TypeVariabl,WildcardType 从实现的接口获取泛型参数 定义一个泛型父类: public interface SuperClass { String ...
C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换
java 一个关于泛型的简单例子 java 一个关于泛型的简单例子 java 一个关于泛型的简单例子
Java中的泛型,在运行时刻其具体类型是被擦除的,这样我们就不能用new T(),instanceof等关操作,特别是对泛型类型的类的实例化问题,在此根据《Thinking in Java》中所讲的对类型擦除所带来问题的三种解决方案,比较...
本代码资源是一个关于Java语言中泛型的讲解案例代码。通过使用实际的示例代码,详细讲解了泛型的定义、用法和优势。 适用人群: 有一定Java编程基础的开发者;对泛型概念感兴趣或希望加深理解的学习者。 使用场景...
《基于C#编程建立泛型Vector数据类型及对应处理方法.docx》 详细介绍了Vector; 《Vector.cs》 是本博客的核心代码,编写了Vector类及其相关的方法; 《Program.cs》 是本博客中调用Vector类的代码,也是用来验证...
JVM如何理解Java泛型类.doc JVM如何理解Java泛型类.doc
java 泛型方法使用示例 java 泛型方法使用示例 java 泛型方法使用示例
根据不同类型枚举,set等进行泛型转换,有赋值转换,也有传参转换,大多数都是底层方法描述,可运行
泛型类型的写法1
介绍获取方法的参数和返回值类型(包括Type和Class)获取泛型参数类型(包括对象的泛型参数或集合元素的泛型类型)方法首先我们定义一个类:public cla
本文详细介绍了java泛型、原始类型、桥接方法。
必须提供的构造方法,以便创建实例的时候就知道具体实体的类型。 daoimpl :PersonDAOImpl extends GenericDaoImpl, Integer> implements PersonDAO public PersonDAOImpl() { super(Person.class); } 告诉对...