原来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
分享到:
相关推荐
在枚举内部,可以通过`Enum<E extends Enum<E>>`的泛型方法`getDeclaringClass()`获取枚举常量所属的枚举类,以及`name()`和`ordinal()`方法获取常量的名称和在枚举中的位置。 总结来说,Java枚举类型提供了一种...
public final class WeekDay extends java.lang.Enum<WeekDay> { public static final WeekDay MON; public static final WeekDay TUE; // ... private final String day; private WeekDay(String day) { ...
在Java中,枚举是一种特殊的类,它继承自`java.lang.Enum<E>`类。枚举的主要目的是提供一组固定常量,比如一周中的天数、一年中的月份等。 #### 2. 定义枚举 定义枚举的基本语法如下: ```java public enum Grade...
public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { ... } ``` 枚举提供了多个内置的方法,这些方法有助于在程序中操作枚举常量: 1. `values()`:返回枚举类型的所有实例...
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java 8中,虽然没有引入重大的反射新特性,但原有的反射API仍然提供了丰富的功能,使得开发者...
<E extends Numner&comparator> 类名&接口,表示E继承Numner类实现comparator接口 <?> 泛型通配符表示任意类型,仅用于传参 <? extends 类型> 表示这个类型可以是该类或者该类的子类。 <? super 类型> ...
return Enum.valueOf(toClass, value); } } ``` #### 五、Array、List、Map等容器类型的参数传递 对于更复杂的类型,如数组、列表、映射等,Struts2同样提供了强大的支持。例如,假设我们需要接收一个用户列表,...
< dependency> < groupId>nl.talsmasoftware.enumerables</ groupId> < artifactId>enumerables</ artifactId> < version>[see maven-central badge]</ version></ dependency>例子一个可Enumerable类型的工作示例...
private static final ThreadLocal<DataSourceType> contextHolder = new ThreadLocal<>(); public static void setDataSourceType(DataSourceType dataSourceType) { contextHolder.set(dataSourceType); } ...
.registerTypeAdapter(MyEnum.class, new EnumTypeAdapter<>(MyEnum.class)) .create(); ``` 这里,`MyEnum`是你想要处理的枚举类型。这样,每次Gson遇到`MyEnum`类型时,都会使用我们定义的`EnumTypeAdapter`...
public class EnumTypeHandler<E extends Enum<E>> extends BaseTypeHandler<E> { private Class<E> enumType; public EnumTypeHandler(Class<E> enumType) { this.enumType = enumType; } @Override ...
public final class Color extends Enum<Color> { public static final Color BLACK; public static final Color WHITE; private Color(String name, int ordinal) { super(name, ordinal); } // 省略其他...
在Android开发中,Gson库是一个非常常用的工具,它能够帮助我们将Java对象转换为JSON字符串,反之亦然。本文将深入探讨如何利用Gson库进行多枚举类型的统一序列化和反序列化处理,以此避免为每个枚举类型单独创建...
6. `<T extends Enum<T>> T valueOf(Class<T> enumType, String name)`:根据枚举类型和名称获取对应的枚举值。 枚举的应用场景: 1. 替代一组常量,例如定义颜色: ```java public enum Color { RED, GREEN, ...
public class GenderTypeHandler extends BaseTypeHandler<Gender> { @Override public void setNonNullParameter(PreparedStatement ps, int i, Gender parameter, JdbcType jdbcType) throws SQLException { ...
其中,类型参数(Type Parameter)是指在类定义中使用尖括号<>括起来的参数,它可以是任何合法的Java标识符。 2. 泛型的接口定义格式 泛型的接口定义格式如下: ``` [ 类修饰词 ] interface 接口名 < 类型参数 1, ...
<enum name="left_bottom" value="1" /> <enum name="right_top" value="2" /> <enum name="right_bottom" value="3" /> </attr> <!-- 尺寸属性dp如果使用px可能会造成屏幕适配问题 --> <attr name="radius" ...
下面将详细探讨Laravel Enum的使用、优点以及如何在项目中实现。 ### 1. 安装与配置 首先,你需要通过Composer安装`spatie/laravel-enum`库: ```bash composer require spatie/laravel-enum ``` 接着,你可以...
<drools-version>6.4.0.Final</drools-version> </properties> <dependencies> <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artifactId> <version>${drools-version}</version> </...
GenericClass<String> strObj = new GenericClass<>("Hello World"); System.out.println(strObj.getValue()); ``` **10.2.3 泛型方法** 泛型方法允许在一个非泛型类中定义泛型功能,可以在方法中指定类型参数。 ...