No, you can't add/remove a method (or public field) of a Java class to
use within the script. You could subclass and expose that subclass as
"java.io.File" by
var oldFile = java.io.File;
java.io.File = Java.extend(oldFile, ...)
But, I'd not recommend it - besides user can still get original
java.io.File via Java.type (unless you do similar hack on Java.type as
well!!)
Cleaner approach is to expose a script API wrapping java.io.File.
-Sundar
On Thursday 17 April 2014 12:03 AM, HRJet wrote:
Is it possible to monkey patch a Java class for use within Javascript?
For example, I want to add a convenience method to java.io.File class, say
"readAsString()".
Then, in javascript I want to call file.readAsString() where file is an
instance of java.io.File. Note that the file instance may be created by
some third-party code, over which I have no control.
In Java land, this seems to be usually done with CGLib or AspectJ, etc.
I was wondering if nashorn had some trick up its sleeve for doing this in
script land, since this sort of thing is common in Javascript.
thanks,
HRJ