Burada iki basit sınıf olan Dad
ve Son
'u oluşturuyorum, Son, Baba'nın bir alt sınıfıdır. SonraJava8: lambda işlevinde genel sürümlü derleyici hatası
public class Dad {
}
public class Son extends Dad {
}
Ben
public class Test {
public static void main(String[] args) {
Function<? extends Dad, String> fun = son -> son.toString();
fun.apply(new Son());
}
test etmek için diğer sınıftaki bir Function
oluşturmak Ama fun.apply(new Son())
bir derleyici hatası karşılaştım, bu uygulamak 'diyor (işlev içinde captrue için appiled edilemez (Oğul) '. Kafam karıştı, fun
Dad
'u genişleten bir sınıf paramız gerekiyor, alt sınıfı veriyorum ama hiç doğru değil.
Dahası! Ben fun
için param olarak new Dad()
deneyin, ama aynı zamanda hata mesajı
Son olarak, ne zaman kullanılabileceği param bilmiyorum ' (işlev içinde captrue (baba) için appiled olamaz) uygulamak ' var jenerik versiyonu ile Function
.
Yardım ~~~ Teşekkürler!
Ne yapmaya çalıştığınızı açıklar mısınız? Eğer fonksiyonunuzun argümanının '' Babanı '' genişletdiğini biliyorsanız, neden '' Fonksiyon 'fonksiyonunu kullanamazsınız? Baba genişletir, String> '? –
sprinter
Tamam, öncelikle bir elemente sahibim. Bu ismin adı SON1 ve SON2, ve burada Son1 ve Son2 yedekleri, her ikisi de Baba'yı genişletiyor. Şimdi dışarıdan enum'un adını SON1 veya SON2 gibi param olarak aldım, Son1 veya Son2'yi veritabanından enum'un ismiyle sorgulamak istiyorum ve Son1'in veya name2'nin Son Adı'nın nickName değerini döndürmek için, her iki öznitelik de String'dir. Geçerli enum yargılamak için if bloğunu kullanmak istemiyorum, sadece enum'u ismiyle almak ve veritabanını enum ile sorgulamak istiyorum ve en – Tony
numaralı enum'dan istediğim özniteliği almak istiyorum. Baba, String> enum, SON1 (Son1 son1 -> son1.getName()) öğesini genişletir. SON2 (Son2 son2 -> son2.getNickName()). Ama başvurduğumda, derlediğim gibi derleyici hatasını aldım. Lütfen bana yardım eder misiniz? ya da ben sadece şu bloğu kullanabilirdim: ( – Tony