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

Reply via email to