标识(空)接口有什么用?
没有任何规范的接口,叫做标志接口。而它的意义就是给实现该接口的所有类打上一个标识,利用这个标识可以对这些类做统一的处理。
举个例子。
设计一个程序,定义一个Person类,类中要存放具体信息,但是信息分为基本信息和联系方式?
Person类里面包含Person信息,但信息分为两类,
一类是基本信息,一类是联系信息
我们要限制该泛型只能使用BasicInfo和MsgInfo,需要使用泛型的上限 T extends 超类。
而BasicInfo和MsgInfo 都是是我们需求的信息,这是俩个不同的类处理一个公共问题,这个时候我们就需要建立一个空接口,向上提取,做成一个超类。
public class Person<T extends Info> {
private T msg;
public T getMsg() {
return msg;
}
public void setMsg(T msg) {
this.msg = msg;
}
@Override
public String toString() {
return "Person [msg=" + msg + "]";
}
}
//包含Person的基本信息
public class BasicInfo<T> implements Info {
private T name;
public T getName() {
return name;
}
public void setName(T name) {
this.name = name;
}
@Override
public String toString() {
return "BasicInfo [name=" + name + "]";
}
}
// 联系信息
class MsgInfo<T> implements Info {
private T msg;
public T getMsg() {
return msg;
}
public void setMsg(T msg) {
this.msg = msg;
}
@Override
public String toString() {
return "BasicInfo [name=" + msg + "]";
}
}
public class Test {
public static void main(String[] args) {
// 泛型嵌套
Person<BasicInfo<String>> p = new Person();
BasicInfo<String> basic = new BasicInfo<>();
basic.setName("张三");
p.setMsg(basic);
System.out.println(p);
Person<MsgInfo<String>> p2 = new Person();
MsgInfo<String> msgInfo = new MsgInfo<>();
msgInfo.setMsg("1234567");
p2.setMsg(msgInfo);
System.out.println(p2);
}
}
public interface Info {// 标识接口
// 没有定义具体规范
}