• ベストアンサー

クラスのインスタンスからクラスを知る方法

メソッドの中で引数がテキストボックスなのかボタンなのか判別させてください。 下のc == TextBoxの部分を正しくしてください。 public static void test1(Component c){ if(c == TextBox)System.out.println("テキストボックス"); if(c == Button)System.out.println("ボタン"); } コンポーネントは下のものです。 /com/nttdocomo/ui/Component.html

  • sntbo
  • お礼率24% (12/49)
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

== ⇒ instanceof

sntbo
質問者

お礼

やってみます。

関連するQ&A

  • 親のクラスの型で引数を指定して子のメソッド使い

    cにはComponentを継承したTextBoxのインスタンス、またはButtonが指定されます。 public static void test1(Component c){ if(c instanceof TextBox)((TextBox)c).requestFocus(); else if(c instanceof Button)((Button)c).requestFocus(); } このように分岐せずに以下のように記述できますか? public static void test1(Component c){ (cのファイナルクラス).requestFocus(); } コンポーネントは下のものです。 /com/nttdocomo/ui/Component.html

    • ベストアンサー
    • Java
  • 内部クラスのインスタンスを動的に取得したい

    class test {   public test(String str){     try{       Class c = Class.forName("test$TESTSUB" + str);       c.newInstance();  // ココでエラー     }catch(Exception e){       e.printStackTrace();     }   }   public static void main(String[] args){     new test(args[0]);   }   class TESTSUB1 {     public TESTSUB1(){       System.out.println("# " + toString());     }   }   class TESTSUB2 {     public TESTSUB2(){       System.out.println("# " + toString());     }   } } 上記のようなコードにより、内部クラスのインスタンスを 動的に得たいと思っていますが、エラーとなってしまいます。 エラー回避方法、または他にいい方法がありましたら、 ご教示のほどよろしくお願いいたします。

    • ベストアンサー
    • Java
  • 静止的フィールドについて教えてください

    教えてください。以下のプログラムだとして、 class Box { static int a = 0 ; int b = 0 ; int c = a+4; } class sample { public static void main(String[] args) { Box n = new Box() ; n.a-- ; n.b-- ; n.c[1]-- ; System.out.println("n.a= "+n.a);//-1 System.out.println("n.b ="+n.b);//-1 System.out.println("n.c[2]="+n.c[2]);//4 Box m = new Box() ; m.a++ ; m.b++ ; m.c[2]++ ; System.out.println("n.a ="+n.a);//0 System.out.println("n.b ="+n.b);//-1 System.out.println("n.c[2] ="+n.c[2]);//4 System.out.println("m.a ="+m.a);//0 System.out.println("m.b ="+m.b);//1 System.out.println("m.c[2] ="+m.c[2]);//4 } } Box nの中のn.aの値はわかります。 ですが、Box mの中のn.aは、a がstaticフィールド(?)なので元の0に戻りますが、m.aがなぜ0なのかわかりません。 そもそもstatic int = ●; のときは、静止的intと教わったのですが、どういう現象が起こるのかいまいちです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • クラス変数/メソッドとインスタンス変数/メソッドの見え方について

    Javaの言語仕様(?)についてお教え下さい。 参照変数の型がインスタンスのスーパークラスの型の時、クラス変数/メソッドとインスタンス変数/メソッドの見え方が納得いかずに困っています。 以下のような条件の時です。   ・クラスが2つあり、1つはもう1つのクラスを継承しています。     それぞれを「スーパー」「サブ」と以下で呼びます。   ・インスタンスは"サブ"の型です。   ・上記インスタンスへの参照変数は"スーパー"のクラスの型です。   ・"スーパー"、"サブ"ともに【同名】の「クラス」変数/メソッド、「インスタンス」変数/メソッドがあります。 この場合に、"サブ"のインスタンスを参照している"スーパー"の型の変数を介し、それらにアクセスしたらどれが見えるか?という疑問です。 実験結果では以下のようになりました。           [フィールド]  [メソッド]   [1.static ]  スーパーの   スーパーの   [2.非static]  スーパーの   サブの 納得いかないのは「2.非static」で「フィールド」が、「スーパーの」になるところです。 これも「サブの」になると思っていました。 なぜサブクラスのが見えないのでしょうか? 同名の変数なのでスーパークラスのはサブクラスので隠れされ、サブクラスのが見えると思っていたのですが。 参考書には以下のように書いてありました。   フィールドの場合、参照変数の型のものが見える。   メソッドの場合、インスタンスの型のものが見える。 私には不自然に感じられるのですが、「こういう仕様だから。」と納得するしか無いのでしょうか? 「なぜこうなるか」について説明がある文献、サイトなどありましたらお教えください。 参考までに以下が実験したサンプルコードと結果です。長くて申し訳ありません。 「サンプルコード」 public class Super { static int staticField = 10; int instanceField = 100; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class Sub extends Super { static int staticField = 90; int instanceField = 900; static void staticMethod() { System.out.println( "staticField = " + staticField ); } void instanceMethod() { System.out.println( "instanceField = " + instanceField ); } } public class TestStatic { public static void main(String[] args) { // インスタンスはSub、参照変数もSub、という状態。 Sub sub = new Sub(); System.out.println( "実験1" ); System.out.println( "1.クラス変数      " + sub.staticField ); System.out.print( "2.クラスメソッド    " ); sub.staticMethod(); System.out.println( "3.インスタンス変数   " + sub.instanceField ); System.out.print( "4.インスタンスメソッド " ); sub.instanceMethod(); // インスタンスはSub、参照変数はSuper、という状態。 Super sup = new Sub(); System.out.println( "実験2" ); System.out.println( "5.クラス変数      " + sup.staticField ); System.out.print( "6.クラスメソッド    " ); sup.staticMethod(); System.out.println( "7.インスタンス変数   " + sup.instanceField ); System.out.print( "8.インスタンスメソッド " ); sup.instanceMethod(); } } 「結果」 実験1 1.クラス変数      90 2.クラスメソッド    staticField = 90 3.インスタンス変数   900 4.インスタンスメソッド instanceField = 900 実験2 5.クラス変数      10 6.クラスメソッド    staticField = 10 7.インスタンス変数   100 8.インスタンスメソッド instanceField = 900 納得が行かないのは7のところです。 以上よろしくお願いいたします。

    • ベストアンサー
    • Java
  • iアプリの関数(log)について

    関数(log)を計算したいのですが、MathクラスでもFastMathクラスでもうまくいきませんでした。 以下のコードだと「シンボルを解釈処理できません」とメッセージが出てコンパイルできません。何か間違っているのでしょうか。それともDojaではlogをサポートしていないのでしょうか? import com.nttdocomo.ui.*; import com.nttdocomo.ui.util3d.*; public class A extends IApplication { public void start() { float res1; res1 = FastMath.log(0.5); System.out.println("FastMathクラス**********"); System.out.println("log(0.5) = " + res1); double res2; res2 = Math.log(0.5); System.out.println("Mathクラス**********"); System.out.println("log(0.5) = " + res2); } }

    • ベストアンサー
    • Java
  • 並び換えるクラスについて

    小さい順に並べかえをテストするクラスが下のように指定されている場合、 小さい順に並べかえ処理をするクラスはどのようにすればいいのでしょう? class SortTest{ public static void main(String[] args){ int[] arri = {3, 2, 8, 7, 4, 6, 1, 0, 5, 9}; System.out.println(); System.out.print("\tソート前:"); arrayPrintln(arri); tool.Sort.ascendBubble(arri); // クラスメソッドに処理を委譲 System.out.print("\tソート後:"); arrayPrintln(arri); System.out.println(); double[] arrd = {3.3, 2.2, 8.8, 7.7, 4.4, 6.6, 1.1, 0.0, 5.5, 9.9}; System.out.println(); System.out.print("\tソート前:"); arrayPrintln(arrd); tool.Sort.ascendBubble(arrd); // クラスメソッドに処理を委譲 System.out.print("\tソート後:"); arrayPrintln(arrd); System.out.println(); } //配列の値を出力するメソッド******************* public static void arrayPrintln(int[] arr){ for(int i=0; i<arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println(""); } public static void arrayPrintln(double[] arr){ for(int i=0; i<arr.length; i++){ System.out.print(arr[i] + " "); } System.out.println(""); } } 初心者な私がggったりして作成したやつが↓です。 class Sort{ public ascendBubble(int[] arri); public ascendBubble(double[] arri); //public void getArri(){ //public void getArri(String[] arri){ public void getArri(int[] arri){ for(int i=0;i<arri.length-1;i++){ for(int j=arri.length-1;j>i;j--){ if(arri[j]<arri[j-1]){ int t=arri[j]; arri[j]=arri[j-1]; arri[j-1]=t; } } } } public void getArri(double[] arri){ for(int i=0;i<arri.length-1;i++){ for(int j=arri.length-1;j>i;j--){ if(arri[j]<arri[j-1]){ int t=arri[j]; arri[j]=arri[j-1]; arri[j-1]=t; } } } } } わかりずらいかと思いますが、 アドバイスの方よろしくお願いします。

  • javaのインスタンス変数とクラス変数の意味がわからない。

    かなり初心者です。全然意味がわかりません。教えてください。よろしくおねがいします。 この意味すべてわからないです。 public class TestCount{ static int counterA; int counterB; public static void main(String []args){ TestCount testA=new TestCount(); TestCount testB=new TestCount(); testA.count(); testB.count(); } public void count(){ for(int i=0;i<5;i++){ counterA++; counterB++; } System.out.println("counterA="+counterA); System.out.println("counterB="+counterB); } } 実行結果 counterA=5 counterA=5 counterB=10 counterB=5 なんでこうなるのかが知りたいです。

    • ベストアンサー
    • Java
  • Integer クラスについて教えて下さい

     今晩は、java初心者です、宜しくお願いします。    Integerクラスについて下のように「i1 = new Integer("1");」と書いても「i2 = new Integer(1);」 と書いても、どちらも数字として認識されているようです。  正式な書き方としてはどちらなんでしょうか、宜しくお願いします。 ========================================================================= public class Test1 { public static void main(String[] args) { Integer i1 = new Integer("1"); System.out.println((i1+2)); Integer i2 = new Integer(1); System.out.println((i2+3)); } }

    • ベストアンサー
    • Java
  • クラスとインスタンスについて

    はじめまして。Javaをはじめて3か月の超初心者です。 早速ではございますが、質問をさせていただきます。 以下のサンプルで、 class Foo { private int i = 0; Foo(int i) { this.i = i; } void func1() { System.out.println(this.i); } void func2(Foo foo) { System.out.println(foo.i); } } class Main { public static void main(String[] args) { Foo obj1 = new Foo(100); Foo obj2 = new Foo(500); obj1.func1(); obj1.func2(obj2); } } privateフィールドのスコープは同一クラス内からしか アクセスできないと参考書には記述されているの ですが、そのクラス内に上のサンプルのように this.iやfoo.iというように、クラスは同じでも インスタンスが異なるものがiにアクセスするとき、 上のサンプルは、どちらもアクセス制限のエラーが表 示されません。なぜなのでしょうか? this.iというアクセスは、現在実行中のインスタン ス内でのアクセスなので、privateスコープ内での アクセスであるというような感じがするのですが、 foo.iというアクセスの方は、現在実行中のインスタンスとは異なるインスタンス内でのアクセスなので、 privateスコープからはずれているような感じがして なりません。

    • ベストアンサー
    • Java
  • TextBoxでEnterキーを押すと、にあるButtonを押したのと同じ効果を出す方法

    VB初心者です。 まだ、はじめたばかりなので、上手く質問を説明できませんが、よろしくお願いします。 環境はVisualBasic .net 2003です。 フォームにテキストボックス(TextBox)とボタン(Button)があります。 テキストボックス内でEnterキーを押すと、ボタン(Button)を押したのと同様の効果をだしたいのですが。 VC++6.0だと、SendMessage(WM_COMMAND , ..... のようなやり方でできたはずですが・・・ --------------------------- テキストボックスのコード Private Sub txtTest_KeyDown(ByVal sender As Object, _ ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtTest.KeyDown If (e.KeyCode = Keys.Enter) Then '★★★ここでどういうコードを書いてよいかわかりません。 End If End Sub ---------------------------- ボタンを押したときのイベントハンドラ Private Sub btnTest_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTest.Click     ボタンを押したら、このイベントハンドラを呼び出したい。     もしくは、間接的に呼び出したい。 ------- どなたか、やり方をご存知の方がいらっしゃいましたら、よろしくお願いします。

専門家に質問してみよう