2015-07-06 31 views
5

genel arabirimi verilen? Java jenerik, arabirimler ve tip kısıtlamalar

public class Run { 

    public static void main(String[] args) { 

     A a = new A<String>("hello"); 

     System.out.println(a.interfaceMethod(100)); \\ returns 0 
    } 
} 

O A kurucusuna beslenir aynı tip bağımsız değişkenler için yöntem sınırlamak için class A tanımlanan yöntem interfaceMethod arasında T tür parametresi beklenen. (bu durumda String).

Neden a.interfaceMethodString türünde bir argüman gerektirmiyor? Eğer uyarıyı göz ardı çünkü olur

+0

Aşağıdaki yapmadım muhtemelen 'A a = new A ("merhaba");' ... – beoliver

+0

Ben tamsayı örtük String döküm olduğunu girişim olacaktır http://stackoverflow.com/ sorular/9159358/örtük-dize-tostring-ve-int – JoSSte

+0

http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use- –

cevap

1

. Aradığım açıklama, @JB Nizet tarafından sağlanan link to a previous post şeklinde geldi.

T t = new T<S>()

T<S> t = new T<S>()

birinci ile aynı olmayan bir ham tip bir örneğidir. niçin bu işe yarardı (i… eğer bir derleme yapar ve bir çalışma zamanı hatası atmazsa) o zaman bunun bir şey olması gerekir.

Bu yazının cevapları ayrıntılı olarak açıklanmakta ve bu derleyicilerin neden tam olarak açıklandığını açıklamaktadır (uzun hikaye kısa, geriye dönük uyumluluk). Gönderi, tüm ayrıntılara girer ve Java'nın tip sistemi için sonuçları açıklar.

1

(veya böyle bir şey) "parametresi a Ham kullanımı"

Kullanım: jenerik ilgili uyarılarını dikkate almayarak zaman

A<String> a = new A<String>("hello"); 

kod olmamalı zaman derlemek olabilir .

+0

Hiçbir uyarı yapılmadı ... Yoksa bu java-docs uyarıları mı? – beoliver

+0

Eğer intellij/eclipse kullanıyorsanız, devre dışı olmadıkça uyarıları görmelisiniz. – BobTheBuilder

+0

Kesinlikle bir uyarı verir: * Run.java, denetlenmeyen veya güvenli olmayan işlemleri kullanır. -Xlint ile yeniden derleyin: ayrıntılar için işaretlenmemiş. * –

1

a örneği A sınıfa yazıldığında sadece
Böyle bunu yazmalısınız çünkü bu çalışır: alışkanlık parametreyi belirtirseniz

A<String> a = new A<String>("hello"); 

, tüm veri tipleri String gibi orada koymak mümkün olacaktır Diğer cevaplar, bir derleyici uyarısının normal olarak ortaya çıkacağını açıklarken, , vb.

+0

Haklısın, @JBNizet, kaldırıldı – maskacovnik

+0

Üzgünüm, gördün mü şu anda geliştirildi @JBNizet – maskacovnik