`
17studio
  • 浏览: 200067 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java中enum的实现enum<E extends java.lang.Enum<E>>

阅读更多

原来E extends java.lang.Enum<E>这个是为了语法顺畅而做的,解决父类和子类协作时,统一语法面使用方法

下面是从别的地方copy来的资料。。。做个标志

考虑下面的语法

E extends Foo<E>

E被识别为Foo的子类,这个情况相当于把一个子类或者自己当成参数,传入到自身,引起一些特别的语法效果,例如

abstract class Foo<SubClassOfFoo extends Foo<SubClassOfFoo>>

{

    /**  subclasses are forced to return themselves from this method */

    public abstract SubClassOfFoo subclassAwareDeepCopy();

}

 

class Bar extends Foo<Bar> {

    public Bar subclassAwareDeepCopy() {

        Bar b = new Bar();

        // ...

        return b;

    }
}

上面代码的含义就如名字所示,可以对子类进行识别,该代码有两个特殊效果

Bar b = new Bar();

Foo<Bar> f = b; // 子类和父类相互赋值

Bar b2 = b.subclassAwareDeepCopy();

Bar b3 = f.subclassAwareDeepCopy(); // 父类直接返回子类的实例,而且不用Cast

 

分享到:
评论

相关推荐

    Java枚举类型Enum的用法

    在枚举内部,可以通过`Enum&lt;E extends Enum&lt;E&gt;&gt;`的泛型方法`getDeclaringClass()`获取枚举常量所属的枚举类,以及`name()`和`ordinal()`方法获取常量的名称和在枚举中的位置。 总结来说,Java枚举类型提供了一种...

    Java中的Enum枚举用法.doc

    public final class WeekDay extends java.lang.Enum&lt;WeekDay&gt; { public static final WeekDay MON; public static final WeekDay TUE; // ... private final String day; private WeekDay(String day) { ...

    java下的enum介绍

    在Java中,枚举是一种特殊的类,它继承自`java.lang.Enum&lt;E&gt;`类。枚举的主要目的是提供一组固定常量,比如一周中的天数、一年中的月份等。 #### 2. 定义枚举 定义枚举的基本语法如下: ```java public enum Grade...

    mybatis入门实战之枚举类型

    public class GenderTypeHandler extends BaseTypeHandler&lt;Gender&gt; { @Override public void setNonNullParameter(PreparedStatement ps, int i, Gender parameter, JdbcType jdbcType) throws SQLException { ...

    Java(enum)枚举用法详解

    public abstract class Enum&lt;E extends Enum&lt;E&gt;&gt; implements Comparable&lt;E&gt;, Serializable { ... } ``` 枚举提供了多个内置的方法,这些方法有助于在程序中操作枚举常量: 1. `values()`:返回枚举类型的所有实例...

    Java 8个反射实例

    Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java 8中,虽然没有引入重大的反射新特性,但原有的反射API仍然提供了丰富的功能,使得开发者...

    \java超强笔记(超级经典)

    &lt;E extends Numner&comparator&gt; 类名&接口,表示E继承Numner类实现comparator接口 &lt;?&gt; 泛型通配符表示任意类型,仅用于传参 &lt;? extends 类型&gt; 表示这个类型可以是该类或者该类的子类。 &lt;? super 类型&gt; ...

    Struts2中的参数传递

    return Enum.valueOf(toClass, value); } } ``` #### 五、Array、List、Map等容器类型的参数传递 对于更复杂的类型,如数组、列表、映射等,Struts2同样提供了强大的支持。例如,假设我们需要接收一个用户列表,...

    enumerables:具有代表“未知”值的能力的Java枚举,非常适合稳定的API

    &lt; dependency&gt; &lt; groupId&gt;nl.talsmasoftware.enumerables&lt;/ groupId&gt; &lt; artifactId&gt;enumerables&lt;/ artifactId&gt; &lt; version&gt;[see maven-central badge]&lt;/ version&gt;&lt;/ dependency&gt;例子一个可Enumerable类型的工作示例...

    多数据源的动态切换.docx

    private static final ThreadLocal&lt;DataSourceType&gt; contextHolder = new ThreadLocal&lt;&gt;(); public static void setDataSourceType(DataSourceType dataSourceType) { contextHolder.set(dataSourceType); } ...

    Gson 枚举类型的统一序列化/反序列化处理

    .registerTypeAdapter(MyEnum.class, new EnumTypeAdapter&lt;&gt;(MyEnum.class)) .create(); ``` 这里,`MyEnum`是你想要处理的枚举类型。这样,每次Gson遇到`MyEnum`类型时,都会使用我们定义的`EnumTypeAdapter`...

    1.springbood+mybatis项目demo2.mybatis自定义枚举类型的转换器以及各种使用场景

    public class EnumTypeHandler&lt;E extends Enum&lt;E&gt;&gt; extends BaseTypeHandler&lt;E&gt; { private Class&lt;E&gt; enumType; public EnumTypeHandler(Class&lt;E&gt; enumType) { this.enumType = enumType; } @Override ...

    java 枚举(enum) 详解(学习资料)

    public final class Color extends Enum&lt;Color&gt; { public static final Color BLACK; public static final Color WHITE; private Color(String name, int ordinal) { super(name, ordinal); } // 省略其他...

    gson源码与文档,集成多枚举类型统一序列化/反序列化处理

    在Android开发中,Gson库是一个非常常用的工具,它能够帮助我们将Java对象转换为JSON字符串,反之亦然。本文将深入探讨如何利用Gson库进行多枚举类型的统一序列化和反序列化处理,以此避免为每个枚举类型单独创建...

    三分钟快速掌握Java中枚举(enum)

    6. `&lt;T extends Enum&lt;T&gt;&gt; T valueOf(Class&lt;T&gt; enumType, String name)`:根据枚举类型和名称获取对应的枚举值。 枚举的应用场景: 1. 替代一组常量,例如定义颜色: ```java public enum Color { RED, GREEN, ...

    Java程序设计:第五章 泛型、枚举与for语句的简化写法.ppt

    其中,类型参数(Type Parameter)是指在类定义中使用尖括号&lt;&gt;括起来的参数,它可以是任何合法的Java标识符。 2. 泛型的接口定义格式 泛型的接口定义格式如下: ``` [ 类修饰词 ] interface 接口名 &lt; 类型参数 1, ...

    Android 自定义组件卫星菜单的实现

    &lt;enum name="left_bottom" value="1" /&gt; &lt;enum name="right_top" value="2" /&gt; &lt;enum name="right_bottom" value="3" /&gt; &lt;/attr&gt; &lt;!-- 尺寸属性dp如果使用px可能会造成屏幕适配问题 --&gt; &lt;attr name="radius" ...

    Laravel开发-laravel-enum

    下面将详细探讨Laravel Enum的使用、优点以及如何在项目中实现。 ### 1. 安装与配置 首先,你需要通过Composer安装`spatie/laravel-enum`库: ```bash composer require spatie/laravel-enum ``` 接着,你可以...

    基于Spring + Drools6.4规则引擎代码实例.

    &lt;drools-version&gt;6.4.0.Final&lt;/drools-version&gt; &lt;/properties&gt; &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.drools&lt;/groupId&gt; &lt;artifactId&gt;drools-core&lt;/artifactId&gt; &lt;version&gt;${drools-version}&lt;/version&gt; &lt;/...

    Java语言基础入门教程 Java实训教程 10.枚举与泛型 共27页.pptx

    GenericClass&lt;String&gt; strObj = new GenericClass&lt;&gt;("Hello World"); System.out.println(strObj.getValue()); ``` **10.2.3 泛型方法** 泛型方法允许在一个非泛型类中定义泛型功能,可以在方法中指定类型参数。 ...

Global site tag (gtag.js) - Google Analytics