| 
	本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
	   5分55秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 步骤 1 : 泛型 Generic 步骤 2 : 泛型的简写 步骤 3 : 泛型的系统学习 步骤 4 : 练习-支持泛型的ArrayList 步骤 5 : 答案-支持泛型的ArrayList 
					不指定泛型的容器,可以存放任何类型的元素 指定了泛型的容器,只能存放指定类型的元素以及其子类 package property;
public class Item {
	String name;
	int price;
	
	public Item(){
		
	}
	
	//提供一个初始化name的构造方法
	public Item(String name){
		this.name = name;
	}
	
	public void effect(){
		System.out.println("物品使用后,可以有效果");
	}
	
}
 
package collection;
  
import java.util.ArrayList;
import java.util.List;
 
import property.Item;
import charactor.APHero;
import charactor.Hero;
  
public class TestCollection {
 
    public static void main(String[] args) {
         
        //对于不使用泛型的容器,可以往里面放英雄,也可以往里面放物品
        List heros = new ArrayList();
         
        heros.add(new Hero("盖伦"));
         
        //本来用于存放英雄的容器,现在也可以存放物品了
        heros.add(new Item("冰杖"));
         
        //对象转型会出现问题
        Hero h1=  (Hero) heros.get(0);
        //尤其是在容器里放的对象太多的时候,就记不清楚哪个位置放的是哪种类型的对象了
        Hero h2=  (Hero) heros.get(1);
         
        //引入泛型Generic
        //声明容器的时候,就指定了这种容器,只能放Hero,放其他的就会出错
        List<Hero> genericheros = new ArrayList<Hero>();
        genericheros.add(new Hero("盖伦"));
        //如果不是Hero类型,根本就放不进去
        //genericheros.add(new Item("冰杖"));
         
        //除此之外,还能存放Hero的子类
        genericheros.add(new APHero());
        
        //并且在取出数据的时候,不需要再进行转型了,因为里面肯定是放的Hero或者其子类
        Hero h = genericheros.get(0);
        
    }
      
}
 
					为了不使编译器出现警告,需要前后都使用泛型,像这样: List<Hero> genericheros = new ArrayList<Hero>(); 不过JDK7提供了一个可以略微减少代码量的泛型简写方式 List<Hero> genericheros2 = new ArrayList<>(); 后面的泛型可以用<>来代替,聊胜于无吧 package collection;
  
import java.util.ArrayList;
import java.util.List;
import charactor.Hero;
  
public class TestCollection {
 
    public static void main(String[] args) {
        List<Hero> genericheros = new ArrayList<Hero>();
        List<Hero> genericheros2 = new ArrayList<>();
     
    }
      
}
 package collection;
  
import java.util.ArrayList;
import java.util.List;
import charactor.Hero;
  
public class TestCollection {
 
    public static void main(String[] args) {
        List<Hero> genericheros = new ArrayList<Hero>();
        List<Hero> genericheros2 = new ArrayList<>();
     
    }
      
}
					借助泛型和前面学习的面向对象的知识,设计一个ArrayList,使得这个ArrayList里,又可以放Hero,又可以放Item,但是除了这两种对象,其他的对象都不能放
					 
				
										
				在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
			 
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
   3分1秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 
					首先创建一个接口 LOL,不需要在其中声明任何方法 接着让Hero和Item都实现LOL接口 最后,声明一个ArrayList的变量lolList,它的泛型是<LOL> List<LOL> lolList = new ArrayList<>(); 这样在lolList中就即放Hero对象,又放Item对象了。 package charactor;
public interface LOL {
}
 
package charactor;
public class Hero implements LOL {
	public String name;
	public float hp;
	public int damage;
	public Hero() {
	}
	public Hero(String name) {
		this.name = name;
	}
	public String toString() {
		return name;
	}
}
 
package property;
import charactor.LOL;
public class Item implements LOL {
    String name;
    int price;
     
    public Item(){
         
    }
     
    public Item(String name){
        this.name = name;
    }
     
    public void effect(){
        System.out.println("物品使用后,可以有效果");
    }
	public boolean disposable() {
		return false;
	}
     
}
 
package collection;
   
import java.util.ArrayList;
import java.util.List;
import charactor.GiantDragon;
import charactor.Hero;
import charactor.LOL;
import property.Item;
   
public class TestCollection {
  
    public static void main(String[] args) {
        List<LOL> lolList = new ArrayList<>();
        lolList.add( new Hero("盖伦")); //能放Hero
        lolList.add( new Item("血瓶")); //也能放Item
        
        lolList.add(new GiantDragon()); // GiantDragon即不是Hero也不是Item
    }
       
}
 
				HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
			   
		
		
		 	问答区域     
		 	
				
		  
	 
	  		
	  
	  	2022-02-26
	  		
	  				
	  					 
	  
					
						答案 
					
					
						
							
						
											
							
					
					
					
	   
 
3 个答案 
	 木宇 跳转到问题位置 答案时间:2024-07-09 打卡
思路一个父类两个子类 wr123 跳转到问题位置 答案时间:2023-11-23 package ArrayList;
import charactor.Hero;
import property.Item;
import java.util.ArrayList;
public class MyArrayList extends ArrayList {
    @Override
    public boolean add(Object o) {
        if ((o instanceof Hero) || (o instanceof Item)) {
            return super.add(o);
        } else {
            System.out.println("所添加的类不符合要求,请选择Hero或者Item对象添加");
            return false;
        }
    }
    @Override
    public void add(int index, Object element) {
        if ((element instanceof Hero) || (element instanceof Item)) {
            super.add(index, element);
        } else System.out.println("该对象不是Hero或者Item及其子类,添加失败");
    }
}
测试
package collection;
import java.util.ArrayList;
import ArrayList.MyArrayList;
import charactor.Hero;
import property.Item;
public class TestCollection {
    public static void main(String[] args) {
        MyArrayList myArrayList=new MyArrayList();
        Hero hero=new Hero("盖伦");
        Item item=new Item("红水晶");
        MyArrayList lgu=new MyArrayList();          //用于验证
        System.out.println(myArrayList.add(hero));
        System.out.println(myArrayList.add(item));
        System.out.println(myArrayList.add(lgu));
        System.out.println(myArrayList.toString());
    }
}
 zhushu 跳转到问题位置 答案时间:2022-11-17 和我想的类似。设计一个父类作为hero和item的父类。然后arrayList后面的类型为父类。这样合理不? 
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2021-07-06
	  		
	  				
	  					 
	  
					
						我的答案 
					
					
						
							
						
											
							
					
					
					
	   
 
3 个答案 
	 zjlilil 跳转到问题位置 答案时间:2023-04-14 这个类继承了ArrayList类,并重写了add方法。在add方法中,判断传入的对象是否为String或Integer类型,如果是,则调用父类的add方法添加到ArrayList中;否则抛出异常。这样就实现了只能存放String和Integer类型数据的ArrayList。 蔚蓝天空157 跳转到问题位置 答案时间:2022-08-07 妙蛙! theCarrot 跳转到问题位置 答案时间:2022-02-24 太牛了 
		回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢	
	 
	  		
	  
	  	2021-06-22
	  		
	  				
	  					 
	  
					
						练习-支持泛型的ArrayList 
					
					
						
							
						
											
							
					
					
					
	   
	  		
	  
	  	2021-01-25
	  		
	  				
	  					 
	  
					
						Lists.newArrayList()也行 
					
					
						
							
						
											
							
					
					
					
	   
	  		
	  
	  	2020-11-05
	  		
	  				
	  					 
	  
					
						答案一:继承ArrayList,再重写方法add 实现了要求 
					
					
						
							
						
											
							
					
					
					
	   提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 20 条以前的提问,请 点击查看 
			
			提问之前请登陆
			
		 
		提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢	
	 |