【发布时间】:2015-08-25 16:58:31
【问题描述】:
我正在创建一个带有接受多个参数的构造函数的 Java 类。在这些参数中,选择具有完全相同的限制:
- 它们可以为空。
- 它们可以有一个项目(在这种情况下,我在本例中称为“链接”的对象,但也可以是许多其他对象),但必须将其嵌入到 ArrayList 中以简化所有内容稍后。
- 它们可以是特定类型的 ArrayList(本例中为链接)。
到目前为止我的代码(忽略简单的“公共类链接”的链接类):
public class Item {
public ArrayList<Link> Links;
public String OtherThing;
public Item(Object Links, String OtherThing) {
this.Sources = prepareArrayList(Links, Link);
this.OtherThing = OtherThing;
}
public Item() {}
private ArrayList prepareArrayList(Object Object, Object Type) {
if(Type.isInstance(Object)) {
return new ArrayList<Type>(Arrays.asList((Type) Object));
} else if (Object instanceof ArrayList<?>) {
if(!((ArrayList<?>) Object).isEmpty()) {
if(Type.isInstance(((ArrayList<?>) Object).get(0))) {
return (ArrayList<Type>) Object;
}
}
}
return null;
}
}
目前这甚至没有达到编译,因为我不能将 Type 参数作为 ArrayList 的类型传递。经过大量研究后,很明显我做错了什么。
如果我为单一类型执行此操作,例如 Link,它可以正常工作(见下文),但我需要它适用于每种类型,其中我有大约 8 个,因此运行它很棘手每一个都有逻辑。
private ArrayList prepareArrayList(Object Object) {
if(Link.isInstance(Object)) {
return new ArrayList<Link>(Arrays.asList((Link) Object));
} else if (Object instanceof ArrayList<?>) {
if(!((ArrayList<?>) Object).isEmpty()) {
if(Link.isInstance(((ArrayList<?>) Object).get(0))) {
return (ArrayList<Link>) Object;
}
}
}
return null;
}
效果很好。有没有可能我需要使用某种接口或另一个类来让它工作?可能是自定义 ArrayList 扩展?谢谢。
【问题讨论】:
-
如果您只使用
Link,为什么要使用Object而不是Link或List<Link>? -
@RealSkeptic 抱歉,我的问题写错了,我现在改正。除了使用 Link 之外,还有不同的类型。我让它按照你提到的方式完美地工作,但是我不得不为除了 Link 之外的不同对象重复大约 8 次。
-
好的,那么为什么不将
Item设为通用呢?请注意,如果您将内容存储在其中的Array<Link>中,您将无法在其中放入除Link之外的任何内容。 -
嗯,这就是我使用函数的原因,还有其他参数,如字符串。我已经快速更新了主要代码。
标签: java class object types parameters