Java: Gerek) (eşittir içinde () instanceof için döküm türü ifade Neden? o referans ya da daha az kod var mı?

oy
0

Burada Java acemi, ben yarım diğer parçacıkları veya dokümanlarda önceki yanıtları tarafından yanıtlanan temel bir soru var, ama yine de tam olarak mekanizması anlamıyorum ve ben olmak istediğinden emin ben, soruları altındaki temellerini (kod kapakları orta).

Temelde, iki MyDate nesneleri aynı tarih olup olmadığını kontrol etmek equals () yöntemi geçersiz kılma ediyorum. O nesne MyDate nesne olup olmadığını o zaman bir MyDate nesnesine özellikle bir geçici nesne döküm tipi, bir instanceof kontrolü yapmak oo zaman tarih karşılaştırmak. Zaten MyDate sınıfının olduğunda neden o, bir MyDate sınıfına geçici değişken döküm tipi mı?

  1. Daha kolay bir referans olarak eşittir'i () karşılaştırma çalıştırmak istediğiniz nesneyi geçici değişkeni kullanıyor musunuz? Eğer karşılaştırma olarak eşittir () kullandığından MyDate.equals(MyOtherDate)ben temelde derleyici emin nerede çeşitli hataları (sıcaklık vb bir değişken, tip uyumsuzluğu olarak çözülemeyen değil olsun sonra başvuruyu tutmak için bir değişken tayin yoksa kodunda, görünüme siz) bir demet daha kod yazmak sürece.

2a. Diğer parçacığı Bazı kontroller instanceof bir örnek bir sınıftan ise ederken, bu denetler bu yönde bir şey söz konusu taban sınıfı, ancak bir alt sınıf kontrol etmez. Özellikle (belirli bir nesneye bir genel nesneden tipi döküm) bu belirli nesne olup olmadığını kontrol etmek derleyici söylüyorsun çünkü isleminden yapmak. NOT: Bu sürüm ve lezzet belirli tip soru olabilir diye benzer sorulara farklı yanıtlar gördüm.

2b. Döküm referans değil, nesnenin kendisi değiştirir. Yani, nesneler aynı sınıftan olursa, ancak farklı alt sınıfları, öyle değil yerine derleme zaman, zamanında başarısız. Ve ben bir ClassCastException almak değildir?

public boolean equals(Object o) {
            if (o instanceof MyDate) {
                MyDate temp = (MyDate) o;
                if ((temp.day == day) && (temp.month == month) && (temp.year == year)) {
                    return true;
                }
            } 
            return false;
        }
Oluştur 14/01/2020 saat 00:01
kaynak kullanıcı
Diğer dillerde...                            


2 cevaplar

oy
0

Java derleyicisi MyDate olarak sizin nesne "o" tipi sınıfını anlamıyor. Bir nesne olarak okunacaktır böylece Object türünde bir parametre aldık çünkü bu durum. Yöntem ve bilinen tip MyDate ait parametrenin özelliklerine erişmek için, bu tür bir nesne olduğunu derleyici söylemek gerekir MyDate. Bu derleyici ne yaptığını anlamak için gidiyor yoludur. Şimdi, başka bir görünüm görme bir göz atalım.

Java her türlü türünü uzanır Objectbir sınıf yazmak her sefer, örtük uzanan olduğunuzu araçlarının Objectkamu / korumalı özellikleri ve davranışları. Eğer yöntemi "geçersiz" neden en Yani equalsaittir Objecttip. : İkisi de aynı tip aitse sen ile örnekte olduğu gibi Pekala, iki nesne arasında bir karşılaştırma yapıyoruz ilk ne zaman, kontrol etmeli if (o instanceof MyDate) { ... }sağlamak için otiptedir MyDate. Eğer "MyDate" ile "o" döküm vermedi Ama bu noktada, erişim MyDate spesifik özellik ve yöntemlerle mümkün olmayacaktır yazın. Bu yüzden bir sınıf varsa, bir süre düşünmek Abenim sınıfını genişletir Bben A'nın içinde erişim B kamu yöntemleri ve özellikleri mümkün olacak ama B aşağı neler olup bittiğini göremiyorum çünkü B aynı yapamaz ağaç. Takip eder misin?

Umut senin şüpheler cevap verebilir.

Cevap 14/01/2020 saat 00:16
kaynak kullanıcı

oy
2

: Java iki ayrı ilgili-büt-kavramları sahip tip bir bölgesinin ifadesi ve çalışma zamanı tipi a değeri .

Bu kavramlar, bir ölçüde uyumludur; bir ekspresyon türü varsa MyDatebu ifade değerlendirmek, o zaman, ya çalışma zamanı tipi ya da bir nesne için bir başvuru almak MyDateya da bir alt sınıfı MyDate, ya da boş bir referans almak ya da bir özel durum ya da sonsuz bir halka veya etajer olsun. Ama kavramlar ayrıdır, ve çalışma zamanı-tipleri ince olsa bile, bazen derleyici türleri hakkında bazı ekstra bilgi vermek gerekir.

Zaten MyDate sınıfının olduğunda> Neden o, bir MyDate sınıfına geçici değişken döküm tipi mı?

Değişken otürüdür Objectdeğil, hiç Çeşidi MyDate. Çalışma zamanı tipi olan bir nesneye bir referans içerir olur MyDate(ya da bir alt MyDate), ama bu tip etkilemez o. Yazdığınız Yani (MyDate)oaynı değerde (ve dolayısıyla aynı çalışma zamanı tip) ve istenen tipiyle bir ifade oluşturun.

Derleyici akıllı olsaydı, belki tedavi edebilir otürüne sahip olarak MyDateİçerideki ifsen döküm gerek olmazdı böylece -Bildirim; ancak mevcut Java Dil Şartname buna izin vermez. (Bu verseydiniz statik yöntem sevk gelince, o bazı garip etkileri olabilir.)

Cevap 14/01/2020 saat 00:21
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more