2016-03-23 12 views
2

Java'yı en iyi şekilde anladığımı anladım ki, bir değişken bildirirken, soyadı ve sağdaki özel uygulamayı bildirmek için genel küme arabirimi kullanılır. Ben Seti arabirimleri beyan etmek varsaJava'da TreeSet

Böylece, doğru yolu

Set<String> set = new TreeSet<>(); 

Ancak bu bildiriyle ben set.last() yöntemini erişmek mümkün değilim olduğunu. Ancak Ben bu şekilde beyan,

TreeSet<String> set = new TreeSet<>(); 

ben erişebilir, last() ve first(). Birisi nedenini anlamama yardımcı olabilir mi?

cevap

4

last() ve first() spesifik TreeSet ait yöntem olup genel arabirim Set bulunmaktadır. Değişkene başvurduğunuzda, ayrılmış türe değil, kaynak türüne bakar, bu nedenle TreeSet'u Set olarak kaydediyorsanız, yalnızca Set olarak değerlendirilebilir. Bu temelde , ek işlevler gizler.

Örnek olarak, Java'daki her sınıf Object'u genişletir.

Ancak final Object mMyList = new ArrayList<String>();

, biz tip döküm uygulamadan mMyList doğrudan bahsederken ArrayList tarzı işlevini kullanmak mümkün olamayacak tüm Java olmasıdır söyleyebilirim çünkü: Bu nedenle bu tamamen geçerli tahsisi jenerik bir Object ile ilgileniyor; daha fazla bir şey yok. her zaman bir Set için mantıklı değil çünkü

+0

Sadece en iyi +1 soruları yanıtlar –

1

Set arayüz last() ve first() sağlamaz.

Java, bir statik yazım dili. Derleyici Set olmak için set beklediğinden set.last() yaptıklarını görüyor. set'un last() sağlayan bir TreeSet olup olmadığını bilmeyecektir, yoksa bu bir HashSet değildir. Bu yüzden şikayet ediyor.

Bekleyin. Burada TreeSet beton sınıfını kullanarak bildirmeniz gerekmez. TreeSet, bu yöntemleri sağlayan SortedSet arabirimini taşır. Bir başka değişle: Eğer (o anlamda first() ve last() sağlayayım hangi) sıralanır bir Set ile çalışmak gerekir, çünkü mücadele etmelidir arayüzü SortedSet yerine sen ne olması gerektiğini Dolayısıyla Set

olmalıdır yapıyor

SortedSet<String> set = new TreeSet<>(); 
2

Sen (first() ve last() yöntemlerini taşıyan) beyanı olarak SortedSet arayüzünü kullanabilir olduğunu.