Agree. I'll fix the wiki.
Thanks
-Sundar
On Monday 21 July 2014 06:17 PM, Marc Downie wrote:
Got it, thanks. I'd consider adding a sentence to the "Java.extend" docs (
https://wiki.openjdk.java.net/display/Nashorn/Nashorn+extensions) to that
end.
My outside perspective is that it's unexpected that a) you can't, b) trying
to fails silently, and c) setting arbitrary members on Java.extend classes
work but they simply disappear never to return.
best,
Marc
On Mon, Jul 21, 2014 at 6:07 AM, A. Sundararajan <
[email protected]> wrote:
No, you can't add new methods to extended class (no facility to declare
types and so on) - only overrides of super class methods.
-Sundar
On Sunday 20 July 2014 10:28 PM, Marc Downie wrote:
Does adding new methods to Java.extend based subclasses actually work?
Currently I have (staying close to the example code):
var ArrayList = Java.type("java.util.ArrayList")
var ArrayListExtender = Java.extend(ArrayList)
var printSizeInvokedArrayList = new ArrayListExtender() {
size: function() { print("size invoked!"); },
banana: function() { print("Banana"); } // this doesn't override
anything
in ArrayList
}
printSizeInvokedArrayList.size() // WORKS
printSizeInvokedArrayList.banana() // TYPE ERROR ([] has no such function
"banana")
// and even:
printSizeInvokedArrayList.peach = function(){print("Peach");} // no
error,
but....
printSizeInvokedArrayList.peach() // TYPE ERROR ([] has no such function
"peach")
(1.9.0-ea-b23 and 1.8.0_20-ea-b23)
Marc.
On Thu, May 1, 2014 at 11:23 PM, A. Sundararajan <
[email protected]> wrote:
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