泛型数据容器Demo

import java.util.Arrays;
import java.util.Scanner;
class GenContainerDemo 
{
public static void main(String[] args) 
{
//GenContainer<Integer> gc=new GenContainer<Integer>();
IContainer<Double> ic=new GenContainer<Double>();
DBox  dbox=new DBox(ic);
dbox.show();
// GenContainer<String> con=new GenContainer<String>();
// String str=con.getClass().getName(); //结果是:GenContainer 而不是GenContainer<String>或者GenContainer<T> 。Class对象的名称。
// String str=GenContainer.class.getName(); 结果是GenContainer。 这里
//上面GenContainer.class不能替代为GenContainer<String>.class……不识别。 泛型的Class对象名称equals类名称(祛除<>的类名称)
}
}
interface IContainer<T>
{
public void add(Object var);
public void modify(int pointer,Object var);
public T get(int pointer);
public void get();


}
class GenContainer<T> implements IContainer<T>
//8中包装类类型可以;基本类型int double都不可以,因为T必须是引用类。
{
private  Object[] ary=new Object[3];
private  int pointer=0;
public void add(Object var){
if (pointer<ary.length)
{
ary[pointer]=var;

}else{
expand();
ary[pointer]=var;
}
pointer++;
//pointer添加完一个元素后,pointer指向后面的一个元素。所以实际的最大的元素位置应该是pointer-1。
}
public void modify(int p,Object var){
if (p<pointer)  

{
ary[p]=var;
System.out.println("修改完成!");
}else{
System.out.println("此次修改越界。");
}
}
public void get(){
for (int i=0;i<pointer ;i++ )
{
T res=(T)ary[i];
System.out.println(res);
}
}
public T get(int p){
if (p>=pointer)
{
System.out.println("获取越界");
return null;
}else{
return (T)ary[p];
}
}
private void expand(){
int nlength=ary.length*2;
ary=Arrays.copyOf(ary,nlength);
}

}


class DBox
//class DBox<GenContainer<T>>   报错:class DBox<GenContainer<T>> 错误: 需要>   说明类进行声明的时候,只能是T不能是其他的。
//引用的时候可以使用GenContainer<T>代替T。
//没有能够成功使用泛型类。因为接收的时候接收的是GenContainer<T> con; con.getClass
{
private IContainer<?> con=null;
DBox(IContainer<?> con){
this.con=con;
}
int i;
Scanner input=new Scanner(System.in);
public void show(){



System.out.println();
System.out.println("**************************************");
System.out.println("*****************存储器 **************");
System.out.println("**************************************");
System.out.println("1.添加元素:");
System.out.println("2.修改元素:");
System.out.println("3.显示所有:");
System.out.println("4.显示显示第n个:");
System.out.println("5.退出:");
i=input.nextInt();
switch (i)
{
case 1:
System.out.println("输入要添加的值:");
Object var2=null;
// if (con.getClass().getName().equals("java.lang.String"))
// {
// var2=input.next();
// }else if(con.getClass().getName().equals("java.lang.Integer")){
// var2=input.nextInt();
// }

var2=input.next();
con.add(var2);

System.out.println("添加完成!");
this.show();
break;
case 2:
System.out.println("输入要修改的位置:");
int i=input.nextInt();
System.out.println("输入要修改的值:");
Object var3=null;
// if (con.getClass().getName().equals("java.lang.String"))
//con.getClass().getName()结果是:GenContainer 肯定不等于String。
// {
// var3=input.next();
// }else if(con.getClass().getName().equals("java.lang.Integer")){
// var3=input.nextInt();
// }
var3=input.next();
con.modify((i-1),var3);
this.show(); 
break;
case 3:
System.out.println("显示所有元素:");
System.out.println("********************************");
con.get();
System.out.println("输入1 返回主菜单:");
while (input.nextInt()!=1)
{
System.out.println("输入1 返回主菜单:");
//只要输入的不符合要求循环执行输出提示:
//符合要求时向下执行!
}
this.show();
break;
case 4:
System.out.println("请输入要查询元素位置:");
int j=input.nextInt();
System.out.println("第"+j+"个元素为:"+con.get(j-1));
System.out.println("输入1 返回主菜单:");
while (input.nextInt()!=1)
{
System.out.println("输入1 返回主菜单:");
}
this.show();
break;


case 5:
System.out.println("谢谢使用!");
System.exit(0);
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值