If there isn't a use for the reflective determination of the type of the new array, it is better to use System.arrayCopy. More efficient (avoids 2 method invocations and a few unnecessary checks and reflexive creation of a array).

Note[] result = new Note[notes.length]
System.arrayCopy(notes, 0, result, 0, notes.length)
return result.