Java重写toString和泛型的使用
一、在一个类中重写toString方法
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// {name=name , age= age}
return "{" + "name=" + getName() +
"age=" + getAge() +
"}";
}
// 重写 equals
@Override
public boolean equals(Object obj) {
// 判断内存地址是否相同
if( this == obj ){
return true;
}
// 判断 传入的obj的对象是否为空 obj的类型与当前类型是否相同
if ( obj == null || this.getClass() != obj.getClass() ){
return false;
}
// 强转 类型
Person p = (Person) obj
// 判断传入的obj对象 的 值是否为空,判断值是否相同,
return this.age == p.age && Objects. equals( this.name,p.name )
// 判断 值是否相同
}
二、泛型的定义和使用
可以 灵活地 将数据类型应用到不同的 类、方法、接口中 将数据类型做为参数进行传递
1。定义和使用含有泛型的类 ,方法,参数
定义格式:
修饰符 class 类名 <代表泛型的变量>{ }
例子:
// 泛型在类中使用 定义的 位置 位于 类名 后
public class Person <E>{
// 泛型作为参数 在 括号里
public boolean add (E e){
}
// 带有 泛型 方法 位于 替换 方法类型
public E get(int index){
}
}
2.距离定义 泛型类
public class MyGenericClass<MVP> {
//没有MVP类型,在这里代表 未知的一种数据类型 未来传递什么就是什么类型
private MVP mvp;
public void setMVP(MVP mvp) {
this.mvp = mvp;
}
public MVP getMVP() {
return mvp;
}
}
3. 含有泛型的 方法 定义的格式
格式:
修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }
public class MyGenericMethod {
public <MVP> void show(MVP mvp) {
System.out.println(mvp.getClass());
}
public <MVP> MVP show2(MVP mvp) {
return mvp;
}
}
4.含有泛型的接口
定义格式:
修饰符 interface 接口名 <代表泛型的变量>{ }
public interface MyGenericInterface<E>{
public abstract void add(E e);
public abstract E getE();
}
在定义类的时候 确定泛型 的类型
例如:
public class MyImp1 implements MyGenericInterface<String> {
@Override
public void add(String e) {
// 省略...
}
@Override
public String getE() {
return null;
}
}
2、始终不确定泛型的类型,直到创建对象时,确定泛型的类型
public class MyImp2<E> implements MyGenericInterface<E> {
@Override
public void add(E e) {
// 省略...
}
@Override
public E getE() {
return null;
}
}
/**
确定泛型
*/
public class GenericInterface {
public static void main(String[] args) {
MyImp2<String> my = new MyImp2<String>();
my.add("aa");
}
}
一、泛型的通配符
当使用 泛型类 或者接口时,传递的数据中,泛型的类型不确定,可以通过通配符<?>表示。但是一旦使用泛型通配符后,
只能使用Object类的共性方法,集合中自身方法无法使用。
1.通配符基本使用
泛型的通配符的:不知道什么时候用什么类型 来 接受的时候, 此时 可以使用 ? 表示未知通配符
例子:
public static void main(String[] args) {
Collection<Intger> list1 = new ArrayList<Integer>();
getElement(list1);
Collection<String> list2 = new ArrayList<String>();
getElement(list2);
}
public static void getElement(Collection<?> coll){}
//?代表可以接收任意类型
Notes:
tips:泛型不存在继承关系 Collection<Object> list = new ArrayList<String>();这种是错误的; 2.通配符高级使用----受限泛型
之前设置泛型的时候,实际上是可以任意设置的,只要是类 就可以设置。但是在Java的泛型中可以制定一个泛型的上线和下限 泛型的上限:
格式: 类型名称<? extends 类> 对象名称
意义:只能接收该 类型及其子类 泛型的下限:
格式 : 类型的名称<? super 类> 对象名称
意义: 只能 接收该类型 及其父类类型
例子:
public static void main(String[] args) {
Collection<Intger> list1 = new ArrayList<Integer>();
Collection<String> list2 = new ArrayList<String>();
Collection<Number> list3 = new ArrayList<Number>();
Collection<Object> list4 = new ArrayList<Object>(); getElement(list1);
getElement(list2);//报错
getElement(list3);
getElement(list4);//报错 getElement2(list1);//报错
getElement2(list2);//报错
getElement2(list3);
getElement2(list4); } // 泛型的上限:此时的泛型?,必须是Number类型或者Number类型的子类
public static void getElement1(Collection<? extends Number> coll){}
// 泛型的下限:此时的泛型?,必须是Number类型或者Number类型的父类
public static void getElement2(Collection<? super Number> coll){}
常见数据结构:
栈、队列、数组、链表和红黑树。
Java重写toString和泛型的使用的更多相关文章
- java重写toString()方法
toString()方法是Object类的方法,调用toString()会返回对象的描述信息. 1)为什么重写toString()方法呢? 如果不重写,直接调用Object类的toString()方法 ...
- java重写toString方法
在输出对象属性时,重写toString按照你希望的输出形式重写 object类里的toString只是把字符串的直接打印,数字的要转化成字符再打印,而对象,则直接打印该对象的hash码.所以当你要想按 ...
- Effective Java 第三版——12. 始终重写 toString 方法
Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将 ...
- java 中重写toString()方法
toString()方法 一般出现在System.out.println(类名.toString()); toString()是一种自我描述方法 本身返回的是 getClass().getName() ...
- java打印和重写toString
class Person { private String name; public Person(String name) { this.name=name; } } public classPri ...
- java实体类如果不重写toString方法,会如何?
先认识一下Object Object 类的 toString 方法 返回一个字符串,该字符串由类名(对象是该类的一个实例).at 标记符“@”和此对象哈希码的无符号十六进制表示组成.换句话说,该方法返 ...
- 【java基础】为什么重写toString()方法?
不得不说,有很多java初学者写java实体类的时候,并没有真正理解重写toString() 方法,可能是口头知道也可能是跟风随带添加toString() 方法,并没有真正理解其意义,如果真要被问起来 ...
- java继承 、方法重写、重写toString方法
1.Java的继承,关键词Extends package cn.mwf.oo; public class TextExtends { public static void main(String[] ...
- 在java中为啥要重写toString 方法?
在java中为啥要重写toString 方法?下面以一个简单的例子来说明. 先定义一个test5类.并写它的get,set方法. package test5; public class Test5 { ...
随机推荐
- eclipse中查看安装的所有插件,并选择性的将其卸载
牢骚:前一段时间安装了一个将错误日志回传到邮箱的eclipse插件,安装此插件对捕获debug虽然很方便,但是也带了我不小的困扰,比如:eclipse加载速度慢.打开速度慢,有时还会引起一些异常,这不 ...
- #HTTP协议学习# (一)request 和response 解析
注:本文转自:http://www.cnblogs.com/TankXiao/archive/2012/02/13/2342672.html , 粉字[]内内容为个人笔记 当今web程序的开发技术真是 ...
- FPGA按一下按键,对应端口输出单个脉冲
对于FPGA的verilog语言,,,规定一个变量不能在多个always中被赋值.但是可以在多个alway块中做判断--结合状态机思想 module state(key,led,clk); input ...
- CAN-bus接口控制实验
CAN-bus接口控制实验 2016-04-12 20:38:41来源: eefocus 关键字:CAN bus 接口控制 收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn 一.实 ...
- 20155234 exp4 恶意代码分析
实验4 恶意代码分析 系统运行监控 Schtasks 先建立一个netstat20155234.txt文件,在文件中输入 date /t >> c:\netstat20155234.txt ...
- wordpress必装的插件 wp最常用的十个插件
wordpress是世界上著名的博客系统,简称wp.一般新安装完wordpress以后,往往需要首先安装一些插件,这样才可以使用wordpress的更多功能.wp最常用的十个插件有哪些呢,可能根据每个 ...
- 纯 CSS 利用 label + input 实现选项卡
clip 属性 用于剪裁绝对定位元素. .class { position:absolute; clip:rect(0px,60px,200px,0px); } scroll-behavior: sm ...
- git和github使用教程
看官请移步git和github简单教程, 本文是上述链接的截图,担心哪天作者不小心删除了,备一份在自己这里,仅为自己看着方便.侵权请告知
- sudo apt-get update 去除设置的代理
今天想装个软件(wine),使用 sudo apt-get update 命令时,发现给出很多Ign 语句,总出现 Connecting to proxy.http://10.0.126.1:1312 ...
- Node.js Event Loop 的理解 Timers,process.nextTick()
写这篇文章的目的是将自己对该文章的理解做一个记录,官方文档链接The Node.js Event Loop, Timers, and process.nextTick() 文章内容可能有错误理解的地方 ...