SORU
25 Temmuz 2015, CUMARTESİ


Varargs Belirsiz Ara Java

Java hakkında biraz kafam karıştıvarargsyöntem:

public static int sum(int ...a) {
    return 0;
}

public static double sum(double ...a) {
    return 0.0;
}

Herhangi bir tartışma geçmeden sum() çağırmaya çalıştım, o zaman yöntemi int sürüm çağrılmıştır. Anlamıyorum; normalde derleyici bir hata yükseltmek gerekir.

Buna göre aşağıdaki kod parçası herhangi bir gerekçe olmadan sum çağırmaya çalıştığımda derleyici bir hata oluşturur:

public static int sum(int ...a) {
    return 0;
}

public static boolean sum(boolean ...a) {
    return true;
}

CEVAP
25 Temmuz 2015, CUMARTESİ


Eğer bir yöntem imzası kesinlikle . burada geçerli olan genel kural şudur: ^em>daha özeldaha sonra Java hata seçer.

İntuituively, yöntem imzası varsa tamamen sil eğer daha özel ve daha az belirli bir varolan her çağırma için geçerli olacaktır.

Her zaman yanınızda bir seçim arasında imzalar sum(int... args) sum(double... args) imza sum(int... args) daha özel, çünkü herhangi bir çağırma yöntemi de olabilir geçti sum(double... args) uygulayarak bir genişletme dönüşümü. Aynı benzer şekilde dönüştürülemez sum(boolean... args) bir yöntem için geçerli değil.

Java Dil Şartnamesi, SE 8 sürüm:

15.12. Yöntem Çağırma İfadeleri

15.12.2.5. Choosing the Most Specific Method

Java programlama dili kuralı kullanıren özelyöntem seçilir.

...

M1 başka bir yöntem uygulanabilir m2, bağımsız değişken ile bir çağırma için daha spesifik bir yöntem uygulanabilir eğer aşağıdakilerden herhangi biri doğruysa, e1, ..., ek ifade:

...

  • m2 değil genel ve m1 ve m2 uygun olarak sıkı veya gevşek çağırma ve nerede m1 resmi parametre türleri S1, ..., Sn ve m2 resmi parametre türleri T1, ..., Tn, türü Sıdaha özeldaha Ti değişkeni için i ei (n, n, n = k 1 (n).

...

Eğer herhangi bir ifade T < bir tür daha özel bir türü: T (§4.10).


4.10. Kistlerinin alt tiplerinin belirlenmesindeki

4.10.1. Subtyping among Primitive Types

uzun >1 int

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AceHoodVEVO

    AceHoodVEVO

    12 Mayıs 2009
  • BDGcustoms

    BDGcustoms

    24 NİSAN 2011
  • Matt Davis

    Matt Davis

    4 ŞUBAT 2006