Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@hosikiti

NativeScriptで、未定義の外部Javaクラスをextendsして新しいクラスを作る

More than 1 year has passed since last update.

NativeScriptでAndroidのSDKに含まれていない外部Javaクラスを使う方法は前に述べましたが、今回は、外部のJavaクラスをextendsして新しいクラスを作る方法になります。

たとえば、com.socdm.d.adgeneration.ADGListener というパッケージのクラスを基底クラスとして AdListener という新しいクラスを作るときのことを考えてみましょう。

まず以下のような記述をおこないます。

declare let com:any;

comパッケージをany型で宣言しています。これは、TypeScriptでcom.socdm.d.adgeneration.ADGListenerをコンパイルエラーにさせないために必要です。

次に以下のように書きます。

class AdListener extends com.socdm.d.adgeneration.ADGListener {

            onReceiveAd() {
                console.log("onReceiveAd");
            }

            constructor(){
                super(); // ここでエラー!
                return global.__native(this);
            }
}

通常はこれで完成。なのですが...super(); の行で、下記のようなエラーが発生します。

 TS2346: Call target does not contain any signatures

これは、super() で呼ぶ先の親のコンストラクタに関する情報が全く無いから、呼べないよ!ということになります。any型なんだから、とにかく呼んでくれよ!と思うわけですが、どうやらコンストラクタについては引数や戻り値の最低限の定義が必要なようです。

そこで以下のようにextendsのあとを書き換えます。

class AdListener extends (com.socdm.d.adgeneration.ADGListener as { new(): any; }) {

            onReceiveAd() {
                console.log("onReceiveAd");
            }

            constructor(){
                super();
                return global.__native(this);
            }
}

{ new(): any; } の部分で コンストラクタの形を定義しています。引数なしで、戻り値はany型である、という定義をしていますね。これでコンパイルが通るようになります。

参考

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
hosikiti

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?