java tostring格式_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 {

// 泛型作为参数   在   括号里

public boolean add (E e){

}

// 带有 泛型 方法 位于 替换 方法类型

public E get(int index){

}

}

2.距离定义 泛型类

public class MyGenericClass {

//没有MVP类型,在这里代表 未知的一种数据类型 未来传递什么就是什么类型

private MVP mvp;

public void setMVP(MVP mvp) {

this.mvp = mvp;

}

public MVP getMVP() {

return mvp;

}

}

3. 含有泛型的 方法 定义的格式

格式:

修饰符 返回值类型 方法名(参数){ }

public class MyGenericMethod {

public void show(MVP mvp) {

System.out.println(mvp.getClass());

}

public MVP show2(MVP mvp) {

return mvp;

}

}

4.含有泛型的接口

定义格式:

修饰符 interface 接口名 { }

public interface MyGenericInterface{

public abstract void add(E e);

public abstract E getE();

}

在定义类的时候 确定泛型 的类型

例如:

public class MyImp1 implements MyGenericInterface {

@Override

public void add(String e) {

// 省略...

}

@Override

public String getE() {

return null;

}

}

2、始终不确定泛型的类型,直到创建对象时,确定泛型的类型

public class MyImp2 implements MyGenericInterface {

@Override

public void add(E e) {

// 省略...

}

@Override

public E getE() {

return null;

}

}

/**

确定泛型

*/

public class GenericInterface {

public static void main(String[] args) {

MyImp2 my = new MyImp2();

my.add("aa");

}

}

一、泛型的通配符

当使用 泛型类 或者接口时,传递的数据中,泛型的类型不确定,可以通过通配符>表示。但是一旦使用泛型通配符后,

只能使用Object类的共性方法,集合中自身方法无法使用。

1.通配符基本使用

泛型的通配符的:不知道什么时候用什么类型 来 接受的时候, 此时 可以使用 ? 表示未知通配符

例子:

public static void main(String[] args) {

Collection list1 = new ArrayList();

getElement(list1);

Collection list2 = new ArrayList();

getElement(list2);

}

public static void getElement(Collection> coll){}

//?代表可以接收任意类型

Notes:

tips:泛型不存在继承关系 Collection list = new ArrayList();这种是错误的;

2.通配符高级使用----受限泛型

之前设置泛型的时候,实际上是可以任意设置的,只要是类 就可以设置。但是在Java的泛型中可以制定一个泛型的上线和下限

泛型的上限:

格式: 类型名称 extends 类> 对象名称

意义:只能接收该 类型及其子类

泛型的下限:

格式 : 类型的名称 super 类> 对象名称

意义: 只能 接收该类型 及其父类类型

例子:

public static void main(String[] args) {

Collection list1 = new ArrayList();

Collection list2 = new ArrayList();

Collection list3 = new ArrayList();

Collection list4 = new ArrayList();

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){}

常见数据结构:

栈、队列、数组、链表和红黑树。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值