我想创建一个只添加字符串或整数的列表。
List L = new ArrayList();
L.add("string");
L.add(8);
我知道List<Object> L
,但我希望L只添加字符串或整数。
答案 0 :(得分:0)
当然,最好的解决方案(从设计的角度来看)是像Elliott Frisch所建议的那样建立一个不可改变的类似联盟的类。对于奇怪的期望字符串获取整数错误,此选项具有最少的途径。
public class StringOrInt {
public final Integer intVal;
public final String stringVal;
public StringOrInt(Integer i) {
intVal = i;
stringVal = null;
}
public StringOrInt(String s) {
stringVal = s;
intVal = null;
}
public boolean isEmpty() {
return stringVal == null && intVal == null;
}
public boolean isString() {
return stringVal != null;
}
public boolean isInt() {
return intVal != null;
}
public boolean equals(Object o) {
if (! (o instanceof StringOrInt)) return false;
StringOrInt s = (StringOrInt) o;
return isInt() && intVal.equals(s.intVal) || isString() && stringVal.equals(s.stringVal);
}
public int hashCode() {
if(isInt()) return intVal.hashCode();
if(isString()) return stringVal.hashCode();
return 0;
}
public String toString() {
if(isInt()) return intVal.toString();
if(isString()) return stringVal;
return "EMPTY STRINGORINT";
}
}
然后你可以简单地使用List<StringOrInt>
,因为:
List<StringOrInt> lst = new ArrayList<>();
lst.add(new StringOrInt(5));
lst.add(new StringOrInt("Hello"));
答案 1 :(得分:0)
如果您有许多此类用例,最好考虑在答案和评论区域中使用其他建议;他们也很干净。但是,如果您只关心将int或字符串值添加到列表中:
定义类似
的方法public void add(final Object o, final List<Object> list) {
if ((o instanceof String) || (o instanceof Integer)) {
list.add(o);
} else {
throw new IllegalArgumentException("You can add only values of type String or Integer.");
}
}
然后按如下方式调用:
List<Object> stringsOrInts = new ArrayList<Object>();
add(8, stringsOrInts);
add("String", stringsOrInts);