2015-01-15 13 views
6

Programlama derslerimizdeki öğretmen "niteliksiz isimler" hakkında konuşuyor, ama gerçekten ne olduğunu merak ediyorum.Java'da niteliksiz bir ad

Metodun isimleri gibi şeylerin niteliksiz olduğundan şüpheleniyorum ama emin değilim.

Bunu bana açıklayabilecek biri var mı? Bunu bilmem gerekiyor çünkü Java'nın niteliksiz bir isme nasıl baktığını açıklamam gerekiyor.

+0

Bu mükemmel bir Yığın Taşması sorusu: Net bir yanıtla basit. Sadece cevabı başka bir yerde bulabildiğim için (bence), bir cevabı olmamalı. Yinelenen bir şey olup olmadığına bakmadım. – Thomas

+0

@Thomas Çok kötü, sıfır araştırma çabası gösteriyor. Bu, bazı insanların reddetmesi için "güçlü" bir nedendir. – Tom

+0

Seninleyim; Ancak, diğer yorumu (yukarıda işaret ettiğim yazıya karşı işaretlediğim) düz orta, yapıcı değildi ve SO'ya kötü bir cevap verdi. – Thomas

cevap

15

Tam ad, tam yolu ile biridir ör .:

java.util.ArrayList list; 

Bir niteliksiz adı geçen parçası vardır:

import java.util.*; 

ArrayList list; 

terimi çok alanları ve yöntemlere başvurabilirler.


Böylece, sınıfları içe aktarabilirseniz, neden nitelikli bir ad kullanmanız gerekir?

Farklı paketlerdeyken, aynı adı paylaşan iki sınıf kullanırken buna ihtiyacınız var. Klasik bir örnek gülünç adlı JDK dan sınıftır: tesadüfen uzanır

java.sql.Date 

java.util.Date 

Eğer benziyor kodu gerekir, böylece hem sınıfın örneklerine göndermeler ihtiyaç makul yaygındır:

public void process(java.util.Date fromDate) { 
    RowSet rows = <run query with fromDate as parameter> 
    while (rows.nsxt()) { 
     java.sql.Date date = rows.getDate(1); 
     // code that needs date 
    } 
} 

İki homonymous sınıfı kullanırsanız, en az bir nitelendirmeden kaçınmayacaksınız - birini içe aktarabilirsiniz, ancak içe aktarma her ikisi de bir belirsizlik oluşturur.

5

Java'da nitelikli bir ad, sınıfın, arabirimin, enumun veya alanın türettiği belirli paketi içerir.

Örnek: java.util.ArrayList tam nitelikli bir addır.

Niteliksiz bir ad, paket bilgisi olmayan sınıf, arabirim, enum veya alantır.

Örnek: ArrayList com.yourcompany.domain.Person tam sınıf adı ve Kişi sınıf adı veya vasıfsız sınıf adı Örneğin

+4

Doğumda ayrı ikizler olmalıyız ... – Bohemian

1

Nitelikli Adı:org.springframework.jdbc.core.JdbcTemplate
Daha sonra paket adı org.springframework.jdbc.core sınıf adını JdbcTemplate

Vasıfsız Adı ​​sahiptir:JdbcTemplate Sadece sınıf adı paket adı sahip değildir.

Örneğin: nitelikli ad, evinizin tam adresidir ve niteliksiz ad yalnızca sizin adınızdır.sohbete söz edilmemiştir, ancak bir parça ekleme

0

(ve bu doğrudan ilgili sorular değil ama inanıyorum görüşmeye yararlı adendum olan): Java

Bütün isimler nitelik gerektiren; bununla birlikte, bazıları Java'nın işlemine bu kadar çok ayrılmazlar - varsaydıkları - ya da "varsayılan" - "sınıfta" olmanız, kodlandığınız (veya import ed). Liskov (2000) buna mükemmel bir örnek verir: java.lang - String gibi nesneleri içeren sınıf.

Java'da genellikle nitelenmemiş adlar görürsünüz. Bu genellikle, erişmeye çalıştığınız sınıfa göre bir sınıfın veya yöntemin bulunduğu yerle (aynı paket) ilgilidir. Yukarıda, diğer posterler, Java'da packages kavramından bahsetmiştir.

Paketler, çarpışmaları daha iyi engellemenize - veya belki de daha iyi engellemeye izin verir. Bir programdaki her paket, başka bir paketin sınıf isimlerini, vb. Çoğaltabilir. Bu durumda, doğru sınıfa erişmek için tam nitelikli isimler kullanılır (diğer cevaplarda da görüldüğü gibi). Tam adını kullanmaktan kaçınmak için bir paketi de içe aktarabilirsiniz; Ancak, iki içe aktarılmış sınıf bir adlandırma çarpışması içeriyorsa, biraz sorun yaşayacaksınız.

+0

Önceden tanımlanmış enum sabitleri olan bir switch() yapısının durumlarını değerlendirirken nitelenmemiş isimler de kullanılır. –

İlgili konular