2012-04-25 34 views
4

我一直在注意到我的import的一些意想不到的結果,我希望能夠理解到底發生了什麼。我開始與以下幾點:Java導入中的通配符如何工作?

import java.util.*; 
import java.io.*; 
import java.nio.*; 
import java.nio.file.Path; 
import java.nio.file.StandardOpenOption.*; 
import java.nio.file.Paths; 

,然後發現ArrayListListIterator沒有工作......所以我說

import java.util.ArrayList; 
import java.util.ListIterator; 

,一切完美的作品。

我假設java.util.*也會導入ArrayListListIterator。爲什麼不呢?

我對我的類/方法/變量名稱有過分冗長的傾向,而且我在程序的其餘部分甚至沒有發現任何東西,甚至關閉保留字。

我在文檔中找不到任何說明爲什麼會出現這種情況的內容,關於Stack的大多數討論都是關於使用*和顯式編碼導入的優化。

任何人有任何想法我可以看看有什麼可以瞭解這種行爲?

+2

什麼*確切*你的意思是「沒有工作」?你能展示一個簡短但完整的程序來證明問題嗎? – 2012-04-25 11:37:40

+0

我沒有得到您的問題 – 2012-04-25 11:40:42

+0

創建一個可以展示您的問題的最小示例。不要使用你現有的大型課程。 – 2012-04-25 11:42:43

回答

6

import java.util.*絕對進口java.util.ArrayList和該包中的其他所有內容。請注意,沒有子包的概念,所以它不會從java.util.xjava.util.y中導入任何內容,但您的問題似乎並不是這種情況。

如果代碼不工作,那麼您的代碼必須有其他一些問題,導入語句的行爲肯定與您描述的相同。

0

我已經嘗試在蝕。

import java.util.*; 

這兩個類都不需要再次導入。

import java.util.ArrayList; 
import java.util.ListIterator; 

因爲通配符*來導入所有的子類和包(切記不能打包子類)

如果導入

import java.util.*; 

我將導入java.util.jar中包但不是罐子小類 :)