Java I';我正在尝试创建一个可以同时接受整数和数组的arrayList
如何在Java中创建一个可以同时接受整数和数组的通用数组列表Java I';我正在尝试创建一个可以同时接受整数和数组的arrayList,java,generics,arraylist,Java,Generics,Arraylist,如何在Java中创建一个可以同时接受整数和数组的通用数组列表 [123,[],112,[],10] 好的,最快的方法可能是创建一个辅助对象,它由整数和数组组成,允许您通过相等的方式使用int(整数包装器)和数组的公共基类is object。所以使用对象类型创建 ArrayList<Object> list= new ArrayList<Object>(); ArrayList list=new ArrayList(); 但是这不是解决这个问题的正确方法,这里没有泛型
[123,[],112,[],10]
好的,最快的方法可能是创建一个辅助对象,它由整数和数组组成,允许您通过相等的方式使用int(整数包装器)和数组的公共基类is object。所以使用对象类型创建
ArrayList<Object> list= new ArrayList<Object>();
ArrayList list=new ArrayList();
但是这不是解决这个问题的正确方法,这里没有泛型来保证运行时的安全性。因此,重新设计您的程序,并在单独的列表中分配每个类型,或者使用任何其他合适的类型。使用一个具有
int
和数组作为其实例变量的类。然后创建一个ArrayList
like
import java.util.ArrayList;
public class Hello {
public static void main(String[]args) {
ArrayList<Intarray> myArrayList = new ArrayList<Intarray>();
int[] arr = {3,4,5};
myArrayList.add(new Intarray(2,arr));
}
}
class Intarray {
private int numbers;
private int[] myArray;
public Intarray(int numbers, int[] myArray){
this.numbers = numbers;
this.myArray = myArray;
}
}
import java.util.ArrayList;
公共课你好{
公共静态void main(字符串[]args){
ArrayList myArrayList=新建ArrayList();
int[]arr={3,4,5};
myArrayList.add(新的Intarray(2,arr));
}
}
类阵列{
私人整数;
私有int[]myArray;
公共数组(整数编号,整数[]myArray){
这个。数字=数字;
this.myArray=myArray;
}
}
在泛化级别为列表中需要的所有对象创建数组列表。在本例中,即对于int和array,它是java.lang.Object
下面是我运行的一个小测试:
public static void main(String[] args) {
List<Object> both = new ArrayList<Object>();
both.add(1);
both.add(args);
System.out.println(both);
}
publicstaticvoidmain(字符串[]args){
列出两者=新的ArrayList();
两者。加入(1);
添加(args);
System.out.println(两者);
}
产生:
[1,[Ljava.lang.String;@1db9742]正如@AbtPst所建议的,最合适的解决方案是拥有一个列表列表。这可以通过许多不同的方式完成。就我个人而言,我会创建一个包含两个构造函数的类
class NumericElement
{
private ArrayList<int> elements;
public NumericElement(int newElement)
{
elements = new ArrayList<int>();
elements.add(newElement);
}
public NumericElement(ArrayList<int> newElements)
{
elements = new ArrayList<int>(newElements); // copying array elements to the new array.
}
public ArrayList<int> getElements()
{
return elements;
}
}
类数值元素
{
私有数组列表元素;
公共数值元素(int-newElement)
{
元素=新的ArrayList();
元素。添加(新元素);
}
公共数值元素(ArrayList新元素)
{
elements=newarraylist(newElements);//将数组元素复制到新数组中。
}
公共ArrayList getElements()
{
返回元素;
}
}
您可以使用类型安全接口定义列表
类,将不安全的列表
隐藏为内部实现细节
<>这是比直接使用<代码>清单>代码>更有效的工作。如果你的列表只被一个类使用,只需使用<代码>列表>代码>作为一个类的实现细节。<强>但是如果你的列表被暴露在一个以上的类中,请考虑使用这种类型安全的方法。< /强>
public class ListOfScalarsAndArray extends AbstractList<IScalarOrArrayInt> {
private static List<Object> m_list = new ArrayList<Object>();
首先,定义一个可以表示int或int数组的接口
public interface IScalarOrArrayInt { }
并为每个可能的元素类型定义子接口:
public interface IScalarInt extends IScalarOrArrayInt {
public int getScalarInt();
}
public interface IArrayInt extends IScalarOrArrayInt {
public int[] getIntArray();
}
然后定义列表类及其表示形式。它的接口可以是列表
表示形式可以是列表
,这样您就可以直接将Integer和int[]对象放入其中,而无需包装对象。
public class ListOfScalarsAndArray extends AbstractList<IScalarOrArrayInt> {
private static List<Object> m_list = new ArrayList<Object>();
为方便调用者,您可以添加一些接受未包装的int
或int[]
的方法。例如:
public void add( int element ) {
m_list.add( element );
}
public void add( int[] element ) {
m_list.add( element );
}
为了满足标准列表接口,您可以包装返回值。您的类控制内部列表,因此它单独控制可能的列表成员类型
private IScalarOrArrayInt wrap( Object o ) {
if ( o instanceof Integer ) {
final int i = (Integer) o;
return new IScalarInt() {
@Override
public int getScalarInt() {
return i;
}
};
}
else {
assert( o instanceof int[] );
final int[] a = (int[]) o;
return new IArrayInt() {
@Override
public int[] getIntArray() {
return a;
}
};
}
}
只需创建对象并添加数组和整数…问题是什么?另一个简单的方法是将int视为一个包含一个元素的列表。这样,您就可以有一个列表。您可以告诉我们为什么需要它?虽然您可以使用
ArrayList
,但它可能表示一种设计味道。这将非常有用pful如果你添加一些代码来解释你的答案。虽然这是达到预期结果的一个好方法;这需要一个整数和一个数组,但我相信海报想要或者…不是两者都想要。