人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

JAVAで動的にキャストする方法をしりませんか。

●質問者: halyan
●カテゴリ:コンピュータ
✍キーワード:Java しり キャスト
○ 状態 :終了
└ 回答数 : 7/7件

▽最新の回答へ

1 ● angelsong
●16ポイント

http://www.atmarkit.co.jp/fjava/devs/object03/object03.html

@IT:連載:ここから始めるオブジェクト指向 第3回

動的にキャストと言うと、ポリモフィズムのことを指しているのでしょうか。

SubClass aObj = (SubClass)getSuperClass();と言ったコーディングでサブクラスへのキャストは可能です。


ここを動的に、と言うことであれば、Classクラスを使用すれば可能です。

aClass aObj = (aClass)Class.forName(”aClass”);

””で渡す引数はString型であれば良いので、プログラム中で動的に変更することが可能です。誤ったクラス名を与えると、ClassCastExceptionがスローされます。

◎質問者からの返答

ありがとうございます。

でも私は(aClass)を動的に例えばaClassを変数で表現できないか考えています。


2 ● akibare
●16ポイント

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html#cas...(java.lang.Object):detail]

J2SE1.5からClass.cast(Object obj)というメソッドが追加されたみたいですが、はっきり言って用途が分かりません。


public void Fuga(Object o)

{

Object o2 = Class.forName(”Hoge”).cast(o);

}


こんなことしても意味無いですし

http://forum.java.sun.com/thread.jspa?threadID=627778&tstart...

Java Technology Forums - dynamic type casting

ここの質問の方と同じことをしたいのだと推測しますが、「無理」みたいです。


* Interfaceを使う

* ベースクラスにダウンキャストする

* Proxyを使う

* ↓みたいにやってみる

Method m = Class.forName(”Hoge”).getMethod(”Fuga”,String.class);

m.Invoke(o, ”Hage”);

http://forums.java.sun.com/thread.jspa?threadID=610635&messa...

ここの方も同じ質問。ダイナミックキャストして、結局は何らかのメソッドを呼び出したい訳ですよね。素直に↓みたいに書くのがシンプル?


if(data instanceof SubClass){

SubClass x = (SubClass) data;

}

else

{

xxxxx

}

http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_t...

JavaRanch Big Moose Saloon

ここにも煮たような質問

◎質問者からの返答

ありがとうございます。

(SubClass)を変数化できないでしょうか。


3 ● kenmaz
●16ポイント

http://d.hatena.ne.jp/kenmaz/

kenmazのはてな

URLはダミーです。


回答になっていませんが・・・


動的にキャストというと・・・


1: Object obj = ...;

2: XXX type = String;

3: String str = (type)obj;


こんな感じでしょうか?

仮に上のようなことが可能であっても、キャストした変数の

受け取り先(ここではstr)のクラスは静的に定義せざるを得ないと

思われるのですが・・

(strをObject型の変数としてしまってはキャストの意味はないですし・・)


どのような使い方を想定されているのでしょうか?

◎質問者からの返答

ありがとうございます。

3:のような使用でただしString型でなくプリミティブでないクラスにキャストする場合で丁度(Type)の

Typeを変数化したいんです。


4 ● wasisan
●16ポイント

http://wisdom.sakura.ne.jp/programming/java/java30.html

instanceof演算子

instanceofでオブジェクトのクラスを判定して,if文で分岐してキャストという

方法(URL参照)では駄目なのでしょうか?

http://www.hellohiro.com/reflection.htm

JavaでHello World リフレクション編

たぶん,クラスの指定を変数化するといったことは難しいと思います

(これを異なった形で実現しているのがjava1.5に導入されたgenerics(テンプレート)な気がします).


基本的にメタ操作なので,リフレクション機能を使えば可能だとは思います(URL参照)


理想的には関数のオーバーライドで

ダウンキャストすることなく作ることが望ましいと思います

◎質問者からの返答

ありがとうございます。

if文だと個数が20個以上あるのでキャストを変数化

したいです。


5 ● たーちゃん
●16ポイント

http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/reflect/...

java.lang.reflect (Java 2 Platform SE 5.0)

Javaで動的にクラスを扱うにはリフレクトを使います。

ポリモフィズムをするのであればObjectクラスに代入するか共通のスーパークラスに代入するべきですが、本当にやりたいことはキャストですか?

C言語のキャストとは全く意味が違うので注意してください。

◎質問者からの返答

ありがとうございます。

Objectクラスを継承すれば特定のクラスにキャストしなくても特定のクラスのメソッドを参照できますか。


1-5件表示/7件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ