我有一个类似下面的类,但我有一个关于使用泛型返回值的问题.
import java.util.ArrayList; public class Box<T extends Number> { private ArrayList<T> list; public Box(){ list = new ArrayList<T>(); } public T get(int i){ if(i <list.size()) return list.get(i); else return 0; // Problem } }
当i <1时,我必须得到0(或0.0 - 取决于T的值) list.size()不为空.如何正确地编码这样做?
解决方法
如果你真的要默认返回0,你可以这样做:
public abstract class Box<T extends Number> { private List<T> list; public Box(){ list = new ArrayList<T>(); } public T get(int i){ if(i <list.size()) return list.get(i); else return getDefault(); } protected abstract T getDefault(); }
然后为您要支持的每个Number子类有一个实现,例如
public class IntegerBox extends Box<Integer> { @Override protected Integer getDefault() { return 0; } }
和
public class DoubleBox extends Box<Double> { @Override protected Double getDefault() { return 0D; } }
等等
一个很好的特点是它可以返回任何默认值,而不仅仅是零…并且相同的原理对任何类型的对象而言都不起作用,而不仅仅是数字.