Java应该将数组视为对象吗?

我经常认为允许将数组作为适当的对象与自己的方法一起使用,而不是依赖像数组,阵列和ArrayUtils这样的辅助类是个好主意。

例如:

ints.sort();                 // Arrays.sort(ints);
int[] onemore = ints.add(8); // int[] onemore = ArrayUtils.add(ints, 8);

我确信我不是第一个有这个想法的人,但是我在寻找其他人之前曾经写过关于这个想法的麻烦。 任何人都可以帮助我对这个主题的一些参考?

这被认为是一个好的或坏的想法,为什么?

这将是多么容易实施?

其他一些例子可能包括(但不要挂在它们上面,它们与问题本身无关):

int[] ints = {5,4,3,2,1};

// Arrays.sort (ints);
ints.sort();

// int pos = Arrays.asList(ints).indexOf (5);
// int pos = ArraysUtils.indexOf (ints, 5);
int pos = ints.indexOf (5);

// Arrays.reverse (ints);
ints.reverse();

Array<Integer> array = ints; // cast to super class.

// int length = Array.getLength (array);
int length = array.getLength();

// Object n = Array.get (array, 3);
Object n = array.get (3);

// Array.set (array, 3, 7);
array.set (3, 7);

Object obj = array;
// if (obj instanceof int[])
//     System.out.println(Array.toString((int[]) obj));
// else if (....)
System.out.println (obj);

数组不是Java中的类,这有很好的理由 - 它们很好地映射到人们对使用C风格语言的体验的理解。 数组低级容器而不是对象也有性能方面的原因。 正因为如此,有时使用基本数组而不是集合有性能优势。

如果你想使用对象,你应该只使用一个Collection(一个ArrayList是一个集合的例子)。 它可能很笨重,但集合提供了您似乎想要的很好的方法访问类型。


这些方法开始看起来像红宝石或Python成语非常多。 不幸的是,你不会在java中这样做(希望你可以)。

正如其他人指出的那样,收藏课为你做。 另一方面,myarray.sort()不太好,因为你可以创建没有定义排序的对象数组。 假设我有

 Foo[] foos; 

而Foo不可比。 foos.sort()会发生什么? 我们绝对不想让它只适用于基元

int[] ints; 
ints.sort(); //legal
Object[] objects;
objects.sort(); //illegal

你当然不能让编译器只允许相似对象的语法。 一旦你得到了类似的东西

 myarray.add(new Foo());

这是没有意义的,因为java中的数组不可扩展。

如果打印出一个数组并不会给你那么多用处,那将会很不错

([I'm an array(*&(*

垃圾,但。


是。 但我认为Java根本就不应该有任何原语 。 我认为Java中的原始语言是对语言清洁的一种打破。 Java中的所有东西都应该是对象。 对象是否分配在堆栈上或堆应该是JVM的实现细节而不是语言结构。 但我认为我的观点可能比大多数更激进。

在自动装箱之前,处理基元和对象非常麻烦。

如果数组是对象并且可以被自动装箱(并且成为!),我们可以有类似的东西

Array<Integer> myArray = new Integer[];
myArray.add(8);
int x = myArray[0];
....

要么

Array<Class<? extends MyBaseObject>> myArray = {ExtendedObject.class}
ExtendedObject object = myArray[0].newInstance();
....
链接地址: http://www.djcxy.com/p/76103.html

上一篇: Should Java treat arrays as objects?

下一篇: Vector vs ArrayList performance