From axeld at pinc-software.de Thu Sep 27 15:23:42 2018 From: axeld at pinc-software.de (=?UTF-8?Q?Axel_D=c3=b6rfler?=) Date: Thu, 27 Sep 2018 17:23:42 +0200 Subject: Extending a Java class Message-ID: <67ff4397-ab78-12c1-bde1-73b8af623b06@pinc-software.de> Hi there, I'm trying to extend an Abstract java base class, and add a new method to it. However, that doesn't seem to work. I've tried it like this: var object = Java.extend(MyType, { newFunction: function(argument) { ... } }); And that: MyType.newFunction = function(...) {...}; var object = new MyType; And also: var object = new MyType({ newFunction: ... }); While it will all happily accept those things, none of them worked. When I try to call the method, it'll say: TypeError: object.newFunction is not a function Do you have any idea how I could solve this? Overriding an existing method works easily, adding a new method does not (at least not this way). Kind regards, Axel D?rfler. From sundararajan.athijegannathan at oracle.com Fri Sep 28 09:34:41 2018 From: sundararajan.athijegannathan at oracle.com (Sundararajan Athijegannathan) Date: Fri, 28 Sep 2018 15:04:41 +0530 Subject: Extending a Java class In-Reply-To: <67ff4397-ab78-12c1-bde1-73b8af623b06@pinc-software.de> References: <67ff4397-ab78-12c1-bde1-73b8af623b06@pinc-software.de> Message-ID: <5BADF5B1.3090806@oracle.com> It is hard to say what went wrong without looking at your full sample/test. Openjdk wiki page explains Java.extend function is here: https://wiki.openjdk.java.net/display/Nashorn/Nashorn%2Bextensions#Nashornextensions-java_extend You may want to take a look at nashorn samples that use Java.extend such these -> http://hg.openjdk.java.net/jdk/jdk/file/7bd8d6b011c9/src/sample/nashorn/flexijson.js http://hg.openjdk.java.net/jdk/jdk/file/7bd8d6b011c9/src/sample/nashorn/resourcetrysuggester.js Hope this helps, -Sundar On 27/09/18, 8:53 PM, Axel D?rfler wrote: > Hi there, > > I'm trying to extend an Abstract java base class, and add a new method > to it. However, that doesn't seem to work. > > I've tried it like this: > > var object = Java.extend(MyType, { > newFunction: function(argument) { > ... > } > }); > > And that: > > MyType.newFunction = function(...) {...}; > var object = new MyType; > > And also: > > var object = new MyType({ > newFunction: ... > }); > > While it will all happily accept those things, none of them worked. > When I try to call the method, it'll say: > TypeError: object.newFunction is not a function > > Do you have any idea how I could solve this? Overriding an existing > method works easily, adding a new method does not (at least not this > way). > > Kind regards, > Axel D?rfler. From axeld at pinc-software.de Fri Sep 28 09:49:11 2018 From: axeld at pinc-software.de (=?UTF-8?Q?Axel_D=c3=b6rfler?=) Date: Fri, 28 Sep 2018 11:49:11 +0200 Subject: Extending a Java class In-Reply-To: <5BADF5B1.3090806@oracle.com> References: <67ff4397-ab78-12c1-bde1-73b8af623b06@pinc-software.de> <5BADF5B1.3090806@oracle.com> Message-ID: <3236fc28-97fd-5a38-cc5d-ad5ec73203f2@pinc-software.de> Am 28/09/2018 um 11:34 schrieb Sundararajan Athijegannathan: > It is hard to say what went wrong without looking at your full sample/test. > > Openjdk wiki page explains Java.extend function is here: > http://hg.openjdk.java.net/jdk/jdk/file/7bd8d6b011c9/src/sample/nashorn/resourcetrysuggester.js Thanks! This usage suggests that it should actually work. Here is my full example stripped down to the bare minimum: ----------------8<---------------- var MatcherEditor = Java.type("ca.odell.glazedlists.matchers.AbstractMatcherEditor"); var filter = new (Java.extend(MatcherEditor)) { setEnabled: function(enabled) { if (enabled) { fireMatchNone(); } else { fireMatchAll(); } } }; filter.setEnabled(true); ----------------8<---------------- The error is: TypeError: filter.setEnabled is not a function in at line number 13 For the Glazedlists class used, see here: http://static.javadoc.io/net.java.dev.glazedlists/glazedlists_java16/1.10.0/ca/odell/glazedlists/matchers/AbstractMatcherEditor.html Source: https://github.com/glazedlists/glazedlists/blob/master/core/src/main/java/ca/odell/glazedlists/matchers/AbstractMatcherEditor.java That looks like a bug to me. But if there's a workaround, I'll take it :-) Kind regards, ?? Axel D?rfler.