本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于泛型的相关问题,包括了自定义泛型类、自定义泛型方法、自定义泛型接口等等内容,下面一起来看一下,希望对大家有帮助。

推荐学习:《java视频教程》
优点:
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("石原里美");
list.add("工藤静香");
list.add("朱茵");
for (String s : list) {
System.out.println(s);
}
}
输出结果:
石原里美
工藤静香
朱茵并且泛型还可以在很多地方进行定义,比如在类后面就是泛型类、方法声明上就是泛型方法、接口后面就是泛型接口。接下来我们共同来学习一下这些泛型是如何使用的:
立即学习“Java免费学习笔记(深入)”;
public class MyArrayList<E>{ }现创建一个泛型类,实现基本的增加、删除操作,以此来具体了解其用法:
//泛型类MyArrayLIst
public class MyArrayLIst<E> {
public void add(E e){
}
public void remove(E e){
}
}
//main
public static void main(String[] args) {
MyArrayLIst<String> list = new MyArrayLIst<>();
//通过对泛型的设定,实现对数据专一处理
list.add("石原里美");
list.add("工藤静香");
list.remove("工藤静香");
}泛型类的原理:
把出现泛型变量的地方全部替换成传输的真实的数据类型。
通过认真观察,其实不难去发现,泛型类与普通类的最大区别在于在调用方法的时候可以统一的对同一种数据进行处理,不会涉及到其他的数据类型,从一定程度上避免了强制类型转化时可能会出现的问题。

今客CRM客户管理系统主要是为了帮助企业解决在日常工作中遇到的客户管理等难题而开发,通过今客CRM客户管理系统可以对企业事务中的不同功能进行操作,用户通过自定义字段类型可以达到适合不同企业的需求。在今客客户关系管理系统中管理着一个企业最为完整的客户信息,全面的客户信息覆盖在企业的市场营销、销售和服务与技术支持等企业整个前端办公领域的各个环节里。它为企业带来附加价值是不可限量的。今客CRM客户管理系
11
public <E> void view(E e){ }无论传入何种类型的数组,都可以返回它的内容,即实现Arrays.toString()的作用
public static void main(String[] args) {
String [] name = {"石原里美","工藤静香","朱茵"};
view(name);
Integer [] age = {18,19,20};
view(age);
}
public static <T> void view(T[] arr){
StringBuilder list = new StringBuilder();
for (int i = 0; i < arr.length; i++) {
list.append(arr[i]).append("\t");
}
System.out.println(list);
}通过实现对泛型方法的定义,可以实现多种数据类型的接收,应用范围更加广泛。
public interface People <E>{ }定义一个People接口,实现对老师Teacher类、学生Student等类的操作
//People接口
public interface People <E>{
void run(E e);
void height(E e);
}
//Student类
public class Teacher {
}
//实现类Fantype
public class Fantype implements People<Teacher> {
@Override
public void run(Teacher teacher) {
}
@Override
public void height(Teacher teacher) {
}
}通过对上述代码的观察,可以发现,People后定义的是什么类型,那么该实现类只能对该种数据类型进行操作,其他类型不可以进行此操作。
假设现在有一场为学生和老师而举办的比赛,需要比较速度究竟谁更快,分别创建一定数量的对象并将其传入集合之中。然而当我们将这两个集合分别传入方法中的时候,会发现,学生对象集合list2出现报错,为什么呢?原因是因为数据类型不同,那么该如何使得两种类型都可以传入呢?或许这个时候就会有人说了:“既然两个类都是People的子类,那么为什么不定义它的泛型是People呢?”这个想法很好,但是我们需要明确一点的是子类与父类虽然是有关系的,但是定义之后的集合是没有关系的,所以这里是行不通的。
//main
//老师对象集合
ArrayList<Teacher> list1 = new ArrayList<>();
list1.add(new Teacher());
list1.add(new Teacher());
pk(list1);
//学生对象集合
ArrayList<Student> list2 = new ArrayList<>();
list2.add(new student());
list2.add(new student());
pk(list2);//由于pk方法的形参是泛型为Teacher的集合,所以会报错
//父类
class People{
}
//子类
class Teacher extends People{
}
class student extends People{
}
//pk方法:
public static void pk(ArrayList<Teacher> people){
}应对这个问题,我们可以便可以将本篇文章引入的知识“通配符”放在实际应用中解决问题了,通过其简短的概念“?可以在‘使用泛型’的时候代表一切类型”就可以理解其作用了,这里我们可以使用“?”共同代表两种类型。
public static void pk(ArrayList<?> people){
//通过通配符?便可以将这个问题解决掉
}然而此时又出现一个问题,定义了一个dog类,试图创建一些对象并传入集合中混入比赛,这种当然情况当然是不允许发生的,然而?是可以表示任意类型的,并不能对其进行限制。因此上下限的作用就体现出来了:
public static void pk(ArrayList<? extends People> people){
//通过上下限便可以将这个问题解决掉
//要求传入的类型必须是People的子类才可以
}推荐学习:《java视频教程》
以上就是一起来理解Java中的泛型的详细内容,更多请关注php中文网其它相关文章!
java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号