views:

248

answers:

4
elementData = Arrays.copyOf(elementData, newCapacity);

Gives error: "The method copyOf(Object[], int) is undefined for the type Arrays"

This was not a problem on my home computer, but at my school's it gives the error above. I'm guessing it's running an older JRE version - any workaround?

Thanks

+1  A: 

Sounds like you have different versions of Java on different computers.

copyOf is new in Java 1.6.

bmargulies
+4  A: 

From the javadocs:

Since:
        1.6

So yes, your school is apparently using Java 1.5 or older. Two solutions are:

  1. Upgrade it (however, I'd first consult the school's system admin ;) ).
  2. Write your own utility method which does the same task (it's open source (line 2908)).
BalusC
+2  A: 

Arrays.copyOf was introduced in 1.6. One work around would be to upgrade to 1.6. Another is to use System.arraycopy (see: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html )

akf
+1  A: 

Arrays.copyOf() was introduced in 1.6.

You'd need to create a new array of the size you need and copy the contents of the old array into it.

From: http://www.source-code.biz/snippets/java/3.htm

/**
* Reallocates an array with a new size, and copies the contents
* of the old array to the new array.
* @param oldArray  the old array, to be reallocated.
* @param newSize   the new array size.
* @return          A new array with the same contents.
*/
private static Object resizeArray (Object oldArray, int newSize) {
   int oldSize = java.lang.reflect.Array.getLength(oldArray);
   Class elementType = oldArray.getClass().getComponentType();
   Object newArray = java.lang.reflect.Array.newInstance(
         elementType,newSize);
   int preserveLength = Math.min(oldSize,newSize);
   if (preserveLength > 0)
      System.arraycopy (oldArray,0,newArray,0,preserveLength);

   return newArray; 
}
Brian Roach