Java 第15章 泛型 课堂练习+本章作业

2023-12-23 05:44

本文主要是介绍Java 第15章 泛型 课堂练习+本章作业,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • ArrayList中的Comparator
  • 判断main中是否出现错误
  • 泛型编程

ArrayList中的Comparator

在这里插入图片描述
ArrayList要先加入对象再调用sort才能排序……

对birthday的比较,最好是放到MyDate类中,这样比较两个日期大小就可以直接调用MyDate类中重写的compareTo方法即可。具体做法是让MyDate类实现Comparable接口,然后重写其中的compareTo方法

public class Homework03 {public static void main(String[] args) {Employee a = new Employee("a", 1, new MyDate(2003, 1, 1));Employee b = new Employee("a", 2, new MyDate(2001, 2, 1));Employee c = new Employee("a", 3, new MyDate(2002, 3, 1));ArrayList<Employee> employees = new ArrayList<>();employees.add(a);employees.add(b);employees.add(c);employees.sort(new Comparator<Employee>() {@Overridepublic int compare(Employee o1, Employee o2) {if (! (o1.getName()).equals(o2.getName()))return (o1.getName()).compareTo(o2.getName());else return ((o1.getDate()).compareTo(o2.getDate()));}});System.out.println(employees);}
}
class MyDate implements Comparable<MyDate>{private int year;private int month;private int day;public MyDate(int year, int month, int day) {this.year = year;this.month = month;this.day = day;}@Overridepublic String toString() {return "MyDate{" +"year=" + year +", month=" + month +", day=" + day +'}';}public int getYear() {return year;}public void setYear(int year) {this.year = year;}public int getMonth() {return month;}public void setMonth(int month) {this.month = month;}public int getDay() {return day;}public void setDay(int day) {this.day = day;}@Overridepublic int compareTo(MyDate o) {MyDate myDate2 = o;if (year == myDate2.getYear()) {if (month == myDate2.getMonth()) {return day - myDate2.getDay();}return month - myDate2.getMonth();}return year - myDate2.getYear();}
}
class Employee {private String name;private double sal;private MyDate date;public Employee(String name, double sal, MyDate date) {this.name = name;this.sal = sal;this.date = date;}@Overridepublic String toString() {return "\nEmployee{" +"name='" + name + '\'' +", sal=" + sal +", date=" + date.toString() +'}';}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getSal() {return sal;}public void setSal(double sal) {this.sal = sal;}public MyDate getDate() {return date;}public void setDate(MyDate date) {this.date = date;}
}

判断main中是否出现错误

public class CustomGeneric_ {public static void main(String[] args) {//T=Double, R=String, M=IntegerTiger<Double,String,Integer> g = new Tiger<>("john");g.setT(10.9);g.setT("yy");System.out.println(g);Tiger g2 = new Tiger("john~~");g2.setT("yy");System.out.println("g2=" + g2);}
}
class Tiger<T, R, M> {String name;R r; //属性使用到泛型M m;T t;T[] ts;public Tiger(String name) {this.name = name;}public Tiger(R r, M m, T t) {//构造器使用泛型this.r = r;this.m = m;this.t = t;}public Tiger(String name, R r, M m, T t) {//构造器使用泛型this.name = name;this.r = r;this.m = m;this.t = t;}/*get and set ...*/@Overridepublic String toString() {return "Tiger{" +"name='" + name + '\'' +", r=" + r +", m=" + m +", t=" + t +", ts=" + Arrays.toString(ts) +'}';}
}

Tiger g2 = new Tiger(“john~~”); 没错,但要能分析出来,由于<T, R, M>没有被确定所以都是Object类型;

g2.setT(“yy”); 没错,因为 T=Object “yy”=String 是Object子类

public class CustomGeneric_ {public static void main(String[] args) {//T=Double, R=String, M=IntegerTiger<Double,String,Integer> g = new Tiger<>("john");g.setT(10.9); //OK
//        g.setT("yy"); //错误,类型不对System.out.println(g);Tiger g2 = new Tiger("john~~");//OK T=Object R=Object M=Objectg2.setT("yy"); //OK ,因为 T=Object "yy"=String 是Object子类System.out.println("g2=" + g2);}
}

泛型编程

在这里插入图片描述
不难,注意JUnit中Test在测试中的使用。
JUnit是一个Java语言的单元测试框架,多数Java的开发环境都已经集成了JUnit作为单元测试的工具

import org.junit.jupiter.api.Test;import java.util.*;public class Homework01 {public static void main(String[] args) {}@Testpublic void testList() {DAO<User> dao = new DAO<>();// savedao.save("01", new User(1, 11, "a"));dao.save("02", new User(2, 22, "b"));dao.save("03", new User(3, 33, "c"));// listList<User> list = dao.list();System.out.println(list);// deletedao.delete("01");list = dao.list();System.out.println(list);// updatedao.update("02", new User(12, 32, "bb"));list = dao.list();System.out.println(list);// getSystem.out.println(dao.get("03"));}
}
class User {private int id;private int age;private String name;public User(int id, int age, String name) {this.id = id;this.age = age;this.name = name;}@Overridepublic String toString() {return "User{" +"id=" + id +", age=" + age +", name='" + name + '\'' +'}';}
}
class DAO<T> {private Map<String, T> map = new HashMap<>();public void save(String id, T entity) {map.put(id, entity);}public T get(String id) {return (T) map.get(id);}public void update(String id, T entity) {map.put(id, entity);}public List<T> list() {List<T> list = new ArrayList<>();Set<Map.Entry<String, T>> entries = map.entrySet();Iterator<Map.Entry<String, T>> iterator = entries.iterator();while (iterator.hasNext()) {Map.Entry<String, T> entry = iterator.next();list.add(entry.getValue());}return list;}public void delete(String id) {map.remove(id);}
}

这篇关于Java 第15章 泛型 课堂练习+本章作业的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526916

相关文章

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问

Javaee多线程之进程和线程之间的区别和联系(最新整理)

《Javaee多线程之进程和线程之间的区别和联系(最新整理)》进程是资源分配单位,线程是调度执行单位,共享资源更高效,创建线程五种方式:继承Thread、Runnable接口、匿名类、lambda,r... 目录进程和线程进程线程进程和线程的区别创建线程的五种写法继承Thread,重写run实现Runnab

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

PowerShell中15个提升运维效率关键命令实战指南

《PowerShell中15个提升运维效率关键命令实战指南》作为网络安全专业人员的必备技能,PowerShell在系统管理、日志分析、威胁检测和自动化响应方面展现出强大能力,下面我们就来看看15个提升... 目录一、PowerShell在网络安全中的战略价值二、网络安全关键场景命令实战1. 系统安全基线核查