2012-03-01 25 views
8

Bu ilginç mesajı derleyiciden yeni buldum ve neden olduğunu bilmiyorum. Burada durumDüğmeye Dökme Gerekiyor - Neden?

Örnek İlk örnekte 1.

Button test = (Button) findViewById(R.id.someButtonId); 
test.setOnClickListener(this); 

Örnek 2.

findViewById(R.id.someButtonId).setOnClickListener(this); 

, ben Button için findViewById tarafından döndürülen bir nesne döküm gerekir. İkinci örnekte, başka bir Button sınıf nesnesini kullanmadığım için döndürülen nesneyi kullanmam gerekmez. Ben

((Button)findViewById(R.id.someButtonId)).setOnClickListener(this); 

yoluyla yayınlamak çalışırsanız ben uyarı Casting findViewById(R.id.someButtonId) to Button is redundant alacak.

Bu neden oluyor? Yayın uyarısını kaldırmaya çalışmıyorum. Ben arkasında mantığı bilmek istiyorum bu ve ben findViewById tarafından döndürülen nesne ile başka bir nesneyi başlatmak için deneyin yoksa döküm gerekli değildir neden.

+0

http://stackoverflow.com/questions/3502690/remove-redundant-casts-in-java –

+0

@Samir ben :) çıkarmak için biliyorum. Buna ihtiyacım yok. Ben soruyorum ** neden ** döküm gerekli değildir. – sandalone

+0

: ( – Triode

cevap

6

nedeni yapmaya yeter. Bu, oyuncuyu yapmadan bile dinleyiciyi ayarlayabileceğiniz anlamına gelir. Böylece dökümün gereksiz.

+0

Burada da sormak: examp2'de olduğu gibi kullanmak güvenli midir? – sandalone

+1

Örnek 2'deki gibi mükemmel. –

+0

Neden güvenli olmayacağını düşünüyorsun? –

2

findViewById() hep böyle ImageView Button gibi tüm Görünümler üstüdür Görünüm döner ...

setOnClickListener Görünüm sınıfının bir yöntemdir. Böylece tıklama olaylarını sadece Düğmeye basmadan yakalayabilirsiniz. Sanırım sadece gereksiz diyor. Dökme gereksiz:

0

I (setOnClickListener tahmin ediyorum) görünümünde bir yöntem yerine Button ve böylece evet olduğunu.

2

Bunun nedeni Örnek 1'de açıkça bir Düğme değişkene atamadan çünkü bir Düğme bulmalıyız olmasıdır.

OnClickListener Görünüm türlerinden herhangi birini, yani buna bir OnClickListener ayarlamak için Görünüm belirli bir alt sınıf için döküm gerekmez. Eğer View tanımlanan setOnClickListener çağırmak için Button için View döküm gerekmez çünkü

+0

Güvenli mi, örnek 2'deki gibi kullanıyor mu? ? – sandalone

+1

Kesinlikle. Örnek 2'de her hangi bir görünüm bulunursa, üzerinde bir OnClickListener ayarlanabilir. –

+1

Yine de bir düğme olduğunu anlayacaksınız, çünkü herhangi bir başka görünüm için idButonId kullanmıyorsunuz, değil mi? –

1

O oluyor. Eğer findViewById döner View ve bu sınıf zaten yöntemi setOnClickListener tanımlar çünkü bu olsun neden bu findViewById(R.id.someButtonId).setOnClickListener(this);

İlgili konular