泛型接口:允许在定义接口时声明类型参数,即泛型接口,这种类型参数在整个接口中可当成类型使用
定义泛型接口语法:
[访问控制符]interface 接口名<类型参数表>{//接体口}
子类实现泛型接口形式
1.实现子类没有明确地指明类型参数的具体类型
class Sub<类型参数表>implements IBase<类型参数表>{}
2.实现子类明确指明类型参数的具体类型
class Sub<具体类型列表>implements IBase<具体类型列表>{}
class Sub implements IBase<具体类型列表>
泛型接口案例:子类Sub实现接口 IBase<T>
泛型与静态成员关系:
1.泛型的类型参数不能作为静态成员变量的类型
2.静态方法中不能有任何泛型类型参数出现
package jus;
interface IBase<T>{
T getT();
void showType();
}
class Sub<T> implements IBase<T>{
private T data;
public Sub(T data){
this.data = data;
}
public T getT() {
System.out.println("返回类型参数T");
return this.data;
}
public void showType() {
System.out.println("输出类型参数T:"+this.data.getClass().getName());
}
}
class person{}
public class Demo {
public static void main(String[] args) {
IBase<Person> sub = new Sub<>(new Person());
sub.showType();
IBase<String> sub2 = new Sub<>(new String("孙悟空"));
sub2.showType();
}
}
package jus;
interface IBase<T>{
T getT();
void showType();
}
class Sub implements IBase<String>{
private String data;
public Sub(String data){
this.data = data;
}
public String getT() {
System.out.println("返回类型参数T");
return this.data;
}
public void showType() {
System.out.println("输出类型参数T:"+this.data.getClass().getName());
}
}
class person{}
public class Demo {
public static void main(String[] args) {
IBase sub = new Sub("孙悟空");
sub.showType();
}
}
package jus;
interface Generator<E>{
void add(E e);
E get(int index);
}
class GeneratorAny<E> implements Generator<E> {
private Object[]elem;
private int index = 0;
private int max;
public GeneratorAny(int count) {
this.max = count;
elem = new Object[max];
}
public E get(int index) {
if (index >= max || index < 0) return null;
return (E) elem[index];
}
public void add(E e) {
if (index >= max)
System.out.println("数据已满:" + "不能保存" + e);
else {
elem[index] = e;
index++;
}
}
}
class person{
private String name;
public person(String name){
this.name = name;
}
public String toString() {
return "姓名:"+name;
}
}
public class Demo {
public static void main(String[] args) {
GeneratorAny<person>gper = new GeneratorAny<person>(3);
gper.add(new person("孙悟空"));
gper.add(new person("猪八戒"));
gper.add(new person("唐僧"));
gper.add(new person("沙僧"));
System.out.println(gper.get(0));
}
}