我知道我可以在定义ArrayList时使用泛型来做到这一点。但这里的情况有所不同。
我有一个ArrayList,当定义时接受任何类型的对象。一旦用户插入第一个Object,我需要使用类引用来查找该对象的类,然后必须确保只有该类的对象被插入到ArrayList中。
示例:
ArrayList arrayList = new ArrayList();
现在让我们说用户在arrayList中输入B类的对象b,然后从现在开始,我必须只允许将类型B的对象添加到arrayList中。
我知道我可以使用以下方法找到插入对象的类:
arrayList.get(0).getClass();
但之后呢?我如何使用刚刚找到的Class类型?
答案 0 :(得分:3)
由于这是一个面试问题,我不会给你一个完整的答案,但你可能想看看Class.isAssignableFrom
方法。
答案 1 :(得分:2)
您不能使用泛型,需要实现运行时检查。
一种方法是将ArrayList子类化,并以检查所添加内容类型的方式实现各种add方法。
get(0).getClass().cast(newObject);
// will throw a ClassCastException if it does not match
答案 2 :(得分:0)
嗯..你可以对班级名称进行比较 - 不是很优雅,但应该做你的工作..
get(0).getClass().getName().equals(classname for the pushed value)
答案 3 :(得分:0)
我在代码中看到了一些设计问题,而不是如何解决这个问题。代码流应确定代码正在做什么,以便它不会将集合发送到一个方法,该方法可以在其中放置任何任意对象(通过检查或不通过)。
我建议重新审视这个设计。
例如,如果有人试图将足球放入集合中,那么该集合应该被传递到可以处理足球的方法中。他们可以使用通用代码或命令模式来处理足球的任何球或特定行为等。
如果代码想要将一个基础球放入一个集合中,那么同样如此,它更好地知道下一步该做什么。
这是一个设计问题......这不是代码问题。