HimaJyunオブジェクト指向って難しいですよね。使おうと思わなければ継承なんてさっぱりですし、ポリモーフィズム?なんですかそれ?新しいプラスチックか何か?状態です。継承が分かれば、コマンドのクラス分割も分かるので、今回はこれを紹介してみようと思います。スポンサーリンク前回の記事は「[Bukkitプラグイン制作講座-其之四]もっとコマンド!!」です。今回紹介する記事のコードはGitHubからご覧になれます。なんか関数が呼べなくなった!!継承ってなぁに?例えば、次の様なクラスがあるとしましょう。{}これを利用するためには次の様にします。Hoge();それでは、次の様なクラスがあるとしましょう。Fuga();ええ、不可能ですね、何言ってるんだコイツレベルです。Hoge型宣言しといてFuga型ぶち込むとか大馬鹿者にも程があるってんですよ。継承を使うとこれが出来てしまいます。{}これを、以下の様に変更します。{}こうする事で、FugaクラスはHogeクラスを受け継いで新たなクラスを宣言している事になります。Fugaクラスは最低限Hogeクラスにあるメソッド(関数)が定義されており、呼び出し可能だとみなされる訳です(実際にFugaクラスに該当のメソッドが定義されていない場合はHogeクラスの物が呼び出されます。)ですので、以下の操作が可能となります。Fuga();と言うより、全てのクラスは暗黙の裡にObjectクラスを継承しています。(なのでObject型には色々ぶち込める訳です)実際の例みなさん、ArrayListとかHashMapとか使いますよね?その時、どうやって宣言していますか?きっと、大抵の場合は以下の様に宣言しているでしょう。ArrayList<Hoge>();あれ???List型で宣言したのにArrayList型を代入していますよ?!これが継承です。ArrayListクラスではListクラスが継承されています、ですので、List型の変数にArrayList型を入れちゃう事が可能なのです。本文に移る前になが~い説明をしちゃいましたが、ここからが本当の本文です。メインクラスのonCommand関数にダラダラと処理を書きまくってる奴は居ないですよね?コマンドはきちんとコマンド用のクラスに分けて処理を行いましょう。Bukkitにもそれを支援するための機能が用意されています。fuga」コマンドの「hoge」の部分です。これはBukkit標準でサポートされているのでとても簡単です。コマンドを実行するための「Hoge」クラスがあるとしましょう。{}これを、次の様に変更します。{}きっと、Eclipseなどに「継承された~」とかって言われるはずなので、onCommandメソッドを宣言します。}}後は、メインクラスのonEnableなどで次の様にして登録してやるだけです。fuga」の「fuga」の部分を別のクラスに振り分けたいと思いました。これはBukkitの標準機能ではサポートされていません。思い出してください、Hogeクラスを継承したFugaクラスはHoge型の変数に入れられるのです。僕は継承とHashMapを組み合わせてサブコマンドのクラス分割を実現していますのでご紹介致しましょう。言っても、やってる事はCommandExecutorと全く同じなのでこれをこのまま利用しましょう。}}さて、問題は先程のonEnableに書き込んだアレです。僕はHashMapで似た様な動作が出来る様にしています。args);//*/}}「ちょっとなにやってんだかわかんないっすね~」、そりゃそうっすよ~これ、明らかに初心者に説明するための書き方じゃないですからね。我流のサブコマンド分割のやり方を紹介しただけなので、無理してマネしなくても良いでしょう。なんか関数が呼べなくなった!!今までメインクラスで実装していたコマンドの処理をそのままクラス分割して上手く行くほど世の中は甘くないです。(主にgetPlayer()などの)一部の(厳密にはJavaPluginクラスの)関数がそのままでは呼べなくなります。言え、メインクラスのインスタンスがあれば良いので、やってみましょう(と言って伝わる訳がありませんが)現在の状態は以下の通りだと仮定しましょう。}}Hogeクラスをnewする際にSample1(実際は自分の作るプラグインに合わせて下さい)のインスタンスを渡します。要は、以下の様に変更する訳です。}}これで、getPlayerなどが必要な際には「instance.getPlayer("HimaJyun");」等の様にして呼び出す訳です。これはもう慣れみたいな物なので......慣れですね。結局、大半のプログラミングは「こうしたい時はこうする」の組み合わせですから。其之六は「[Bukkitプラグイン制作講座-其之六]特定の出来事(イベント)に反応する」です。newする時の悩み事そこそこにこそこそとDirectX9の勉強をしています、DirectX9EXだと......続きを読む→[Bukkitプラグイン制作講座-其之十一]メタデータを扱う不慣れ(はじめて)な事にしばらく手出ししていると、(記事を書けるレベルの)慣れて......続きを読む→[Bukkit/Spigot]自作プラグインで/titleと同じ事をするBukkitプラグイン開発者のみなさまこんにちは。Encryptにイントラサイトの証明書を発行してもらうナカのヒト:HimaJyun​散って美しいのは桜だけです、情報はまとまっていた方が美しいのです。