23
条:不要在新代码中使用原生态类型
Java
1.5
加入了泛型,即类型参数,在
1.5
之前可以将任意对象放入集合中,所以在从集合中取出来的时候都需要做强制类型转换,这就有可能导致
ClassCastException
。
1.5
加入泛型后,就得到了在编译期间检查的好处了。虽然在运行时泛型会做擦除,泛型的目的应该还是减少
ClassCastException
和一些表述上的优势。比如
List<Date>
就是存放
Date
的一个
list
,而在
1.5
以前就是一个
List
,可以放任何东西,只能程序员自己控制。
所以能不使用
rawtype
就别使用,有些地方你可能不知道该使用什么类型参数,这时应该使用通配符
<?>.
但是在类文字中必须使用
Raw
type,
比如
List.class,String.class
而
List<String>.class
是不合法的。
第
24
条:消除非受检警告
尽量消除非受检警告,没有非受检警告意味着不会出现
classCastException
。如果无法消除,但是又确定类型安全的时候可以用
SuppressWarning(“unchecked”)
注解来消除,当然在该用的地方用这个注解。
第
25
条:列表优先于数组
由于数组是协变的,如下
:
Object[]
ob = new Long[1];
ob[0]
= "abc";
这样在编译期间不会有任何错误,但是在运行时马上就会抛出
ArrayStoreException
。
而如果你试图将一个
String
类型放入
List<Long>
中编译将不会通过。由于数组是协变的,所以数组是不能够泛型化的。
总的来说就是除非必要,都应该优先考虑用列表而不是数组。
第
26
条
:
优先考虑泛型
尽可能的将一些可能持有对象的类编写为泛型,避免在使用这些类的时候做类型转换。
第
27
条:优先考虑泛型方法
应该尽量确保调用方法时不需要做类型转换,所以尽量将方法泛型化。
第
28
条
:
利用有限制通配符来提升
API
的灵活性
有限制通配符是指
? extends
E,? super E.
第一个是指任何
E
的子类,第二个指任何
E
的父类。什么时候用哪个呢,有个助记符可以让你记住
PECS – producer extends consumer super.
利用这条原则来编写有限制的通配符。所有的
comparator
和
comparable
都是
consumer
,在有
Comparable<T>
时都可以考虑
Comparable<? super T>.
第
29
条:优先考虑异构安全的类型容器
jdk
里面的容器在有类型参数的情况下指允许放入参数类型的实例,但你可以编写一个以
Class<T>
为
key
,
value
为该
class
对应实例的类来存放不同类型的实例,这个就是异构。
如下示例代码:
package com.andyjiang.generic;
public interface Favorites {
public <T> void putFavorite(Class<T> clazz,T instance);
public <T> T getFavorte(Class<T> clazz);
}
package com.andyjiang.generic.impl;
import java.util.HashMap;
import java.util.Map;
import com.andyjiang.generic.Favorites;
public class FavoritesImpl implements Favorites {
private Map<Class<?>,Object> favoriteMap = new HashMap<Class<?>,Object>();
public <T> void putFavorite(Class<T> clazz, T instance) {
this.favoriteMap.put(clazz, instance);
}
public <T> T getFavorte(Class<T> clazz) {
// TODO Auto-generated method stub
return clazz.cast(this.favoriteMap.get(clazz));
}
}
分享到:
相关推荐
Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力【泛型】---- 代码 Java 第二阶段提升编程能力...
日常笔记-JAVA泛型
泛型是Java语言的一个重要特性,首次出现在Java SE 1.5版本中。它的引入主要是为了解决在集合操作中类型安全性的问题,并通过引入参数化类型的概念,提高了代码的复用性与可读性。 ### 泛型概念 泛型,即参数化...
、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 枚举类 2020-4-10 java 注解...
Java泛型机制详解 Java泛型是Java语言中的一种机制,用于在编译期检查类型安全。Java泛型的出现解决了Java早期版本中类型安全检查的缺陷。Java泛型的好处是可以在编译期检查类型安全,避免了运行时的...
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
Java 泛型是Java编程语言中的一个重要特性,它在2004年随着Java SE 5.0的发布被引入。泛型的主要目的是提供类型安全,同时减少在编译时和运行时出现的类型转换错误。它允许程序员在定义类、接口和方法时指定参数类型...
java-泛型-面试题.docx
泛型是Java SE 5引入的一种强大的类型系统机制,允许在类、接口和方法中使用类型参数,从而增强了代码的类型安全性和重用性。在Spring框架中,泛型主要应用于依赖注入(Dependency Injection,简称DI),这是Spring...
Java泛型是在JDK 5中引入的一种新特性,用于创建参数化类型,也就是说,可以在类、接口和方法中定义类型参数。泛型提供了类型安全的集合以及避免了显式类型转换的需要。使用泛型可以实现类型安全的数据结构,如List...
补充知识:泛型1---马克-to-win java视频的详细描述与介绍
补充知识2 ---马克-to-win java视频泛型的详细描述与介绍
Java泛型是Java SE 5.0引入的一个重要特性,它极大地增强了代码的类型安全性和可读性。泛型在编程中的应用广泛,特别是在集合框架中,使得我们可以在编译时就检查类型,避免了不必要的类型转换,并且提高了代码的...
《Effective Java》是Java开发领域的经典著作,作者...以上仅是《Effective Java》的部分内容,书中还有更多关于枚举、泛型、集合、多线程等方面的重要指导,都是Java开发者提升代码质量、遵循良好编程习惯的宝贵资源。
Java泛型是Java语言中的一种重要机制,自从Java 1.5版本引入泛型以来,Java开发者可以更方便地编写类型安全的代码。泛型的引入解决了Java早期版本中类型不安全的问题,提高了Java语言的开发效率和安全性。 泛型的...
基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码.zip 基于java的开发源码-java多线程反射泛型及正则表达式学习笔记和源码....
学习Java的第一步是安装Java Development Kit (JDK),它包含了编译、调试和运行Java程序所需的所有工具,如javac编译器和Java虚拟机(JVM)。 3. **基本语法** - **变量与数据类型**:Java有八种基本数据类型,...