我发现了一些奇怪的代码,我说“这永远不会被调用,因为它会抛出一个类强制异常”。那么代码被调用并且它的工作。
任何人都可以解释我:为什么这有效?
方法 getZipList() 被定义为返回一个字符串列表,但内部逻辑返回一个包含不同对象的列表。同样在 main 方法中,字符串列表应为“列表”,但列表包含不同的内容。
public class GenericMethodList{
public static void main(String [] args)
{
GenericMethodList o = new GenericMethodList();
List<String> list = o.getZipList(true);
Iterator<?> iter = list.iterator();
while (iter.hasNext()){
ZipCode zipplace = (ZipCode) iter.next();
System.out.println(zipplace.value);
}
}
public List<String> getZipList(boolean someParameter){
//why is this not throwing an exception at runtime?
List list;
if(someParameter){
list = getZipCodes();//List<ZipCode>
} else {
list = getZipStreets();//List<ZipStreet>
}
return list;
}
private List<ZipCode> getZipCodes(){
List<ZipCode> list = new ArrayList<ZipCode>();
list.add(new ZipCode("code1"));
list.add(new ZipCode("code1"));
return list;
}
private List<ZipStreet> getZipStreets(){
List<ZipStreet> list = new ArrayList<ZipStreet>();
list.add(new ZipStreet("street1"));
list.add(new ZipStreet("street2"));
return list;
}
public class ZipCode{
public String value;
public ZipCode(String value){
this.value = value;
}
}
public class ZipStreet {
public String value;
public ZipStreet(String value){
this.value = value;
}
}
}
非常感谢您的解释。