Transfer.java: rename get methods to just be the name of the field with the appropriate type, like in the other classes (Descriptors etc.). This is consistent and easy to use.
Move callback and maxNumIsoPacketSize to C, minimizing what is kept in Java: only the pointer and the transferBuffer. setLength() is still checked here, as that's easiest.
Update the tests to match the changes and add documentation on the new methods.
Add new transfer_data structure (Java and other objects). Update transfer functions accordingly.
Check all variable names for consistency.
Fix memory leak on failed getDeviceDescriptor.
Use result == LIBUSB_SUCCESS instead of just !result, it is much clearer what the integer that you get as result actually means that way.
Rename trans to transfer inside LibUsb functions, like in Transfer.c.
Add methodID field to transfer_data structure, so that it can be cached at set() time and the callback is faster.
Also update the length when setting a new buffer!
Finish work on Transfer implementation. Everything is consistent, fast callbacks are provided, support for FREE_TRANSFER is there and fully cleans up resources.
To support FREE_TRANSFER in the case the user doesn't set (or explicitely sets) a callback of null on the Java side, a small C-callback was created that just takes care of cleaning up the Java objects and resources.