Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

actionクラスからlogicクラスの呼び出し方法について

はじめまして、ωです。

今家でstrutsのべんきょうをしているのですが以下のところで詰まっています。

actionクラスからlogicクラスの呼び出し方はどうやるのか?

logicクラスはinterfaceを持っています。

actionクラスにて
?
XXXLogic logic とインターフェースを定義して

String str = logic.getStr();

見たいな感じで値を取りたいのですがnullポで落ちました。どうやらlogicの実装クラスがnewされていないみたいです。

?
そこでactionでlogicの実装クラスをnewしてやったらできたのですが

XXXXLogicImpl aaa = new XXXXLogicImpl();
String str = aaa.getStr();

?のやり方で値を取得したいのですがそもそもできないのでしょうか。。。
やり方を教えていただければ幸いです。

よろしくお願いいたします。





10

回答

9266

閲覧

10件の回答

評価

0

>logicクラスはinterfaceを持っています。
>XXXLogic logic とインターフェースを定義して


logicはクラスなの?インタフェースなの?
もし、インタフェースをnewしたい、
ってことを言っているのであれば、それはムリです。

評価

0

コロさん
回答ありがとうございます。
説明不足だったみたいですのでもう一度説明させていただきます。

登場クラスは以下になります。
1、actionクラス
2、logicクラス
3、2のインターフェイス

actionクラスで
2をnewするのではなく
3を使用して値を取得したい。
つまりこうです。

public class XXXXAction extends Action {
//インターフェイスを定義
    XXXXLogic logic;

    /**
     * @see org.apache.struts.action.Action#perform(ActionMapping, ActionForm,
     *      HttpServletRequest, HttpServletResponse)
     */
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
          //インターフェイス経由で値を取る
        ↓しかしNULLポで落ちてしまう。
        String name = logic.getName();


        return mapping.findForward("success");
    }
}

以上よろしくお願いします。








評価

0

できません。

>登場クラスは以下になります。
>3、2のインターフェイス

インターフェースは、クラスじゃありません。

Strutsの前に、Javaの仕組みをべんきょうしましょう。
このサイトにも、管理者さんが充実した教材を
そろえてくださってますよ。

評価

0

聞きたいのは以下です。
・インタフェースはクラスじゃないということは理解していますか
・なぜnullポが出るのかはわかりますか
・なぜインタフェースから参照したいのですか

以上3点お答えくださいね。

評価

0

見落としていた・・・。

>2008-10-10 11:51
>//インターフェイスを定義
>    XXXXLogic logic;

これはインターフェースの定義じゃないよ。
変数の宣言だ。

>コロ氏
誤誘導しちゃったようで。
申し訳ないです。m(_ _;m

でも、なんでnewしたくないのかな。
最近は、ループも書いたこと無いような新人に、
2週間でWebアプリまで詰め込もうとするらしいけど・・・。

評価

0

いえ。
一番最初の投稿で、
>XXXXLogicImpl aaa = new XXXXLogicImpl();
とあったので、
>インターフェースは、クラスじゃありません。
ということを「理解」できたら、
>XXXXLogicImpl aaa = new XXXXLogicImpl();
>String str = aaa.getStr();
こうして、値が取得「できるはずがない」
ことがわかると思いまして。

aaaに、「どうやって実装クラスをいれたらいいか」
がわからないのか、
そもそも、「インタフェースがnewできないんですけどなんでですか」なのか、
ちょっとわからなかったもので。

評価

0

コロさん

回答ありがとうございます。

・インタフェースはクラスじゃないということは理解していますか
>クラス定義の雛型として使用する感じでしょうか。

・なぜnullポが出るのかはわかりますか
>実装クラスであるXXXXLogicImplがnewされていないからでしょうか。

・なぜインタフェースから参照したいのですか
>特にインターフェースから参照したいという訳ではないのですができるのかなと興味を抱いてみました。
できないのであれば特に気にしないです。

できるのであればどっちが一般的というか効率がいいというかそれを知りたかっただけであります。

みなさんいろいろとありがとうございます。



評価

0

>雛型
インタフェースはあくまで定数と抽象メソッドしか持たないです。newするのは実装クラス。

XXXXLogic logic = new XXXXLogicImpl();
こうすればよいのですけど、
これでは答えにならないのでしょうか?



評価

0

上に補足。
インタフェースから参照するのはよいのですが、
インタフェースA,B,Cがあるとき、
class Sample implements A, B, C {
//A,B,Cのメソッドをそれぞれ実装
}
このとき、

A a = new Sample();
とすると、インタフェースAにあるメソッドしか利用できなくなるのでご注意を。
#当たり前のことなんですが。逆にコレを利用するのも一興

評価

0

コロさん

ご回答ありがとうございます。
以下の方法で答えになっていると思います。

XXXXLogic logic = new XXXXLogicImpl();
こうすればよいのですけど、
これでは答えにならないのでしょうか?

ご丁寧にありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。