2

「キャスティング」に関する利用可能な(同様の)質問は、これが何であるか、または何をするのかを実際には明確にしません(ちなみに、Androidプログラミングを始めたばかりです)。「キャスティング」の効果にどこでどのように気付くのでしょうか?

違いは何ですか:

Button b = (Button) findViewById(R.id.btn_second)

Button b = findViewById(R.id.btn_second)

敬具、

ピーター

4

4 に答える 4

1

これを試して、

findViewById(R.id.btn_second)  will return a View. 

しかし、それがどのような種類のビューであるか、ボタン、リスト、TextView、EditView など.

ここで findViewById(R.id.btn_second) は Button タイプの View を返すので、それを Button タイプにキャストします。

Button b = (Button) findViewById(R.id.btn_second);

わかりました、例を挙げます。

public abstract class Animal{
    public abstract void sound();
}

public class Dog extends Animal{
    public void sound(){
        System.out.println("Wooffffff");
    }
}

public class Cat extends Animal{
    public void sound(){
        System.out.println("Meowwwwwwww");
    }
}

ここで、1 つの犬と 1 つの猫のオブジェクトを作成すると..

Dog d = new Dog();
Cat c = new Cat();

public class CloneAnimal{

    public void doIt(Animal a){
        if(a instanceof Dog)
            Dog d1 = (Dog) a;
        else 
            Cat c1 = (Cat) a ;
    }
}

(Dog) と (Cat) は、(Button) のように明示的なキャストです。

于 2012-06-10T10:28:14.470 に答える
0

これはJava継承の質問です。

メソッドfindViewByIDは、View型のオブジェクトを返します。すべてのウィジェットクラスはViewを継承しているため、「ボタンはビューです」と言います。

ViewオブジェクトをButton参照に割り当てることはできません。キャスト演算子はコンパイラに「このViewオブジェクトはたまたまボタンであると確信しています」と言っています。

これが意味をなさない場合は、継承と参照オブジェクトのキャストに関するチュートリアルを確認する必要があります。

于 2012-06-10T08:24:11.780 に答える
0

Java オブジェクトの型キャストでは、1 つのオブジェクト参照を別のオブジェクト参照に型キャストできます。キャストは、独自のクラス型、またはそのサブクラスまたはスーパークラスの型またはインターフェイスの 1 つに対して行うことができます。Java でのキャストには、コンパイル時の規則と実行時の規則があります。

キャスト演算子 (型) は、値をある型から別の型に変換したり、オブジェクト参照を互換性のある型に変更したりするために使用されます。

于 2012-06-10T08:26:25.157 に答える
0

型は Android に固有のものではなく、オブジェクト指向プログラミングをうまくやりたい場合は、よく理解しておく必要があります。継承ポリモーフィズム、および型変換について読むことをお勧めします。これらは、私たちが行うオブジェクトの種類を使用する理由を理解するのに役立ちます.

あなたの質問に答えるために、Android UI オブジェクトはすべてView(docs here ) という型から派生します。これは、インターフェイスを定義します。つまり、このタイプのすべてのオブジェクトが実行できる必要があること (自分自身を「描画」できるなど) を定義します。これにより、Android は、インターフェースを実装/拡張する限り、あらゆるタイプの表示可能オブジェクトでView動作できるようになるため、独自のカスタム UI オブジェクトを作成でき、Android はそれが新しいタイプであるという事実を知る必要はありません。他のViewオブジェクトと同じように相互作用できます。

あなたの質問では、ダウンキャストしています。ここでは、オブジェクトのタイプについてより具体的に説明しているため、ダウンキャスト先のタイプの定義済みインターフェイスを使用して、別の方法でオブジェクトと対話できます。アップキャストは別の方法で行われます。特殊化されたオブジェクトをより一般的なものにし、それがそのタイプのサブタイプである場合、つまり同じインターフェイスを実装することを意味します。

于 2012-06-10T08:57:30.533 に答える