我要实现以下功能:
public boolean checkType(Vector<?> vec)
{
// return true if its Vector<Integer> and false otherwise
}
如何检查向量元素类型? 请注意, 向量可能为空,因此我无法检查第一个元素是“ instanceof”整数还是String …
编辑:
好吧,我脑子里有个念头,我不知道它是否会起作用
我可以按以下方式实现checkType函数:
public <T> boolean checkType(Vector<T> vec)
{
// return true if T is Integer and false otherwise
}
是否可以检查T是否为整数?!
提前致谢
*由于
类型擦除,
*泛型类型参数
在运行时不可恢复(某些特殊情况除外)。这意味着在运行时,Vector<Integer>
和Vector<String>
都只是Vector
s,而它们的元素也只是Object
引用。
只有instanceof
单个元素的实际运行时类(可以通过检查发现)才能确定元素类型,否则Vector本身不知道其元素类型是什么。
因此,基本上,任何类型的空向量都等于任何其他类型的 空 向量。像这样强制转换甚至是安全的:
Vector<String> noStrings = (Vector<String>) new Vector<Integers>();
但是,存在一个问题,因为尽管您可以说 空 向量符合任何必需的元素类型,但是 只要向量保持为空 ,该语句就成立。因为如果您这样做:
Vector<Integer> ints = new Vector<Integer>(); // empty
Vector<String> strings = (Vector<String>) ints; // unchecked warning, but still possibly ok
ints.add(1); // here comes trouble
String s = strings.get(1); // oh oh, ClassCastException
回答您的第二个问题:不,不可能这样写:
public <T> boolean checkType(Vector<T> vec) {
return T instanceof Integer; // impossible
return T == Integer; // impossible
return T.class == Integer.class // impossible
return vec instanceof (Vector<Integer>); // impossible
}
但是,您可以编写一个使用类标记作为输入参数的方法:
static <T> boolean checkElementType(Collection<?> collection, Class<T> elementType) {
for (Object object : collection) {
if (!elementType.isAssignableFrom(object.getClass())) {
return false;
}
}
return true;
}
然后您可以像这样使用它:
List<?> list1 = Arrays.asList(1, 2, 3);
List<?> list2 = Arrays.asList(1, 2, 3, "a");
System.out.println(checkElementType(list1, Integer.class)); // true
System.out.println(checkElementType(list2, Integer.class)); // false
我有一个具有如下结构的集合对象: 我该怎么办?非常感谢,很抱歉我的英语不好!
问题内容: 通过使用Java反射,我们可以轻松知道对象是否为数组。判断对象是否为集合(Set,List,Map,Vector …)的最简单方法是什么? 问题答案:
问题内容: 我是Node.js和Heroku的新手,我构建了一个使用node.js并从mongodb实例检索一些数据的小应用程序。我设置了整个程序,但是我的问题是我认为mongodb的语法很简单。 我需要在启动应用程序时知道我的收藏夹中是否包含任何东西,如果没有,则不进行初始化。我尝试调用collection.count(),但返回未定义。 我尝试这样做 任何帮助表示赞赏。 问题答案: 任何访问数
问题内容: 有没有一种方法可以检查nodestore的firestore中是否存在子集合? 目前,我正在使用文档,但是我需要检查文档中是否存在子类以便写入一些数据。 问题答案: 就在这里。您可以使用docs.length来知道子集合是否存在。 我制作了一个样本来指导您,希望对您有所帮助。
问题内容: 我有两种检查列表是否为空的方法 和 我的拱门告诉我,前者比后者更好。但是我认为后者更好。 任何人都可以澄清一下吗? 问题答案: 您应该 绝对 使用。计算任意列表的可能会很昂贵。即使确认是否有任何元素 可以 是昂贵的,当然,但没有优化不能 也 让速度更快,而相反的情况并非如此。 例如,假设你有一个链表结构,它 并没有 缓存的大小(而 做 )。然后将变为O(N)运算,而仍为。 当然,另外,