我有两个课程,我们称之为Foo和Bar。
public class Foo {
//...
}
public class Bar {
//...
}
我想创建一个可以处理Foo,Bar和String类型的ArrayList。通常,我只是在我的类中应用一个接口,即
public class Foo implements MyInterface {
//...
}
public class Bar implements MyInterface {
//...
}
然后我可以使用ArrayList<MyInterface>
。但是,我正在努力解决如何为String实现此接口。我是否坚持使用ArrayList<Object>
或是否还有另一种更优先的方式来完成此任务?
编辑:为我遇到的实际问题添加一些清晰度:
我想创建一个嵌入了对象的句子。
即。 “[Foo]跑上树,和[Bar]一起战斗,而一群[Foo]看着。”
因此,ArrayList可以通过其内容构造和解构,这些内容将按以下顺序编制索引:
我想到的另一种方法是按字符串中的索引和长度跟踪对象位置。所以我有一个整个句子的字符串,以及跟踪任何MyInterface对象的位置/长度的另一个属性。
答案 0 :(得分:3)
如果您要拥有一个可以容纳String
实例,Foo
实例和Bar
实例的集合,那么 - 是 - 没有其他可能性a Collection<Object>
,因为这三种类型没有任何共同之处。
原因是,你确实有一个非常异质的集合。将其声明为Collection<Object>
表示您拥有的和您想要的内容。
请注意,您认为正确的方向:您的集合的类型参数应该是它们最接近的类型。因此,如果您的课程Foo
和Bar
实施了界面MyInterface
,并且您计划只保留这两种类型的实例,那么您可以拥有Collection<MyInterface>
您不能让String
类型实现您的界面。
答案 1 :(得分:3)
一个简单的解决方案是为String创建一个实现MyInterface
的包装器。像:
public class MyString implements MyInterface {
private String string;
....
}
然后将MyString
的实例添加到列表中。
答案 2 :(得分:1)
如果您想将String
与自定义对象存储在同一个A rrayList
中,则表示您的类与字符串一起工作也没有?在您的课程中实施CharSequence
。
您不需要的CharSequence
方法抛出MethodNotImplementedException
。
答案 3 :(得分:-1)
@SuppressWarnings("rawtypes")
ArrayList arrayList=new ArrayList();