程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 10種可以節省時間的Eclipse Europa技術 - 如何充分利用該熱門IDE

10種可以節省時間的Eclipse Europa技術 - 如何充分利用該熱門IDE

編輯:關於JAVA

簡介:Eclipse Europa 提供了許多用於浏覽和編輯 Java™ 文件的方便功能。了解 Eclipse Europa 提供了哪些功能及如何使用這些功能,當您學完本教程時,您可能會說 “我以前可真不知道”!

開始之前

關於本教程

本教程將介紹如何用 Eclipse Europa 提高生產率,這裡將提供 10 種方法加速在 Eclipse 中的開發工作。本文展示的用於提高生產率的許多功能是 Eclipse Europa 中 引入的新功能或經過改進的功能。

目標

了解如何更好地使用重構工具、搜索工具、工作區 和代碼模板。在學完本教程後,應當能夠成為 Eclipse 高級用戶 —— 執行更少量的工作獲 得更高的生產率。我們的目標是向您展示如何利用 Eclipse 功能來執行普通任務。

先決條件

如果曾經使用過 Eclipse 並完成過一些 Java 開發會有幫助。您不必是專家,但是應當充分了解 Java 編程語言才能掌握基本語法和范例,從而最大限度地發揮重構本教程各部分的作用。

系統要求

要跟隨完成本教程的示例,需要具備 Eclipse Europa 及 Eclipse 支持的操作系統 之一 —— Mac OS X、Microsoft® Windows® 或 Linux®。還需要有 Java 運行 時環境(Java Runtime Environment,JRE)—— 建議至少要使用 Java V5 的 JRE。

Europa 及其快捷鍵的簡要介紹

Eclipse Europa

在 Eclipse V3.2 發行版以前,不需要 對各個插件的發行版進行組織。實際上,對 Eclipse 的抱怨之一是需要下載 IDE,然後花很長時間下載 和安裝需要的插件。這種情況隨著多個項目的第一個同步發行版 —— Callisto —— 而改變。Eclipse Europa 是項目的第二個同步發行版,該版本把 Eclipse 提升到 V3.3 並且是按照開發類型組織到 Europa 發現站點中的經過改進的標准項目集。

要進行動態 Java Web 開發,如 JavaServer Faces (JSF) 或 JavaServer Pages (JSP),您只需要下載最新版本的 Eclipse 並 安裝 Web 開發功能。要進行 C 和 C++ 開發,可以使用一組有關的特性以及其他功能。

安裝完 Eclipse Europa 之後,您就可以開始利用這個強大的 IDE,它提供了真正豐富的功能和本教程將介紹的 眾多生產力特性。

使用快捷鍵

鍵盤快捷鍵可以幫您節省很多時間,尤其是使用雙手在鍵盤 上執行命令或功能時。但是要記住所有快捷鍵並不容易。一方面,按 Ctrl+Shift+O 組合鍵自動組織 Java 類文件的導入非常快捷。而另一方面,如果需要搜索幫助或查找快捷鍵對照表來查找要使用哪個快 捷鍵,那麼使用快捷鍵也不會起到快捷的作用。

在 Eclipse 中,您只需記住適用於平台的一個快 捷鍵:Ctrl+Shift+L 組合鍵(對於 Windows 或 Linux 計算機)或者 Command+Shift+L 組合鍵(對於 Mac)。該快捷鍵將為您提供 IDE 中的其他快捷鍵的 “heads-up 顯示”。當顯示快捷鍵後, 您可以用箭頭鍵滾動查找並在命令被突出顯示時按 Enter 鍵來執行。快捷鍵顯示在命令旁邊,如圖 1 所 示,這樣您下次就能記住它。

圖 1. 內置命令及其鍵盤快捷鍵列表

表 1 將提供一些在 Eclipse Europa 中非常有用的鍵盤快捷鍵。

表 1. Java 編輯器中的快捷鍵組合

快捷鍵 功能 Ctrl+R 定位資源,例如文 件。 Ctrl+T 定位類型,例如類,包括在源代碼內部和外部的那些類。 Ctrl+O 列出正在處理的 Java 類中的方法和屬性。 Ctrl+1 當錯誤被突出顯示時,提供糾正錯誤的建議。 Ctrl+Space 列出正在鍵入的模板、方法或字段的建議。

使用熱鍵

自定義快捷鍵
您可以更改按哪些鍵來執行命令。在快 捷鍵顯示後再次按 Ctrl+Shift+L 組合鍵或者在 Windows > Preferences > General/Keys 下的 Preferences 窗口中更改它們。

能夠通過單擊熱鍵查找菜單、命令和首選項是 Eclipse Europa 中最令人興奮的新功能之一。例如,如果忘記整理代碼的菜單項或者配置設置的首選項頁面的位置該怎麼 辦?您只需按 Ctrl+3 組合鍵(或者對於 Mac 是 Command+3 組合鍵),然後將顯示一個列表。開始鍵入 您要查找的內容,例如 clean,然後將顯示匹配的命令、菜單和首選項結果。

圖 2. 菜單、命令 和首選項列表

Search 菜單:探險 工具

有一次,當我跟同事談起必須要記住大型項目包結構的組織方式才能快速找到所需的 Java 類時,他對我說,“當我需要查找時,我通常轉而使用搜索工具”。我一直堅持了這個原則, 因此只要我需要到代碼中查找內容時,我稱它為 探險(spelunking)。它讓我感覺像在探險並在找到丟 失的代碼時歡欣鼓舞。

Eclipse 有很多十分強大的搜索工具,這樣它可以改進組織代碼的方法。 您不用考慮使用命名約定或包(目錄)來簡化工件的查找;相反,可以使用包按照域或目的對工件進行分 組。

Search 菜單如此強大的原因是它允許您執行比搜索文件文本更多的操作。您可以使用 Java 搜索查找方法聲明、引用您的類或方法的 JUnit 測試,甚至還可以查找引用了突出顯示的方法的其他代 碼。

查找是否出現

查看圖 3 中的 Search 菜單。下面討論的強大功能包括 References、 Declarations、Implementors、Read Access 和 Write Access。

圖 3. Eclipse Search 菜單

每個搜索功能都提供 允許您快速確定搜索范圍的子菜單。表 2 中列出了搜索范圍和其中的內容。

表 2. 在 Eclipse 中搜索

搜索范圍 包含內容 Workspace 包 括當前工作區中的所有文件。 Project 僅在當前項目內搜索查找是否出現。 Hierarchy 僅在當前類或接口的層次結構中搜索,這僅限於父類、實現類或 子類。 Working Set 僅在所選工作集中搜索(在 “工作集” 小 節中了解工作集的更多信息)。

分別查看清單 1 和清單 2 中的簡單接口 Cow 和實現類 Hereford。兩張清單將幫助您了解對於不同類型的搜索可以獲得哪類結果。

清單 1. Cow 接口

public interface Cow {
  void moo();
}

Hereford 類將實現 Cow 接口並且有一些用於演示目的的方法。

清單 2. Hereford 類

public class Hereford implements Cow {

  private  String name;

  public void moo() {
    String message = "My  name is " + name + ". Moo!";
    System.out.println(message);
  }

  public String getName() {
    return name;
  }

   public void setName(final String name) {
    this.name = name;
  }

}

References

對於這兩張清單,如果在清單 2 中突出顯示 name 並 搜索 references,則結果類似圖 4,其中方法名包含了對 name 變量的引用。

圖 4. 對 references 的搜索結果

Declarations

如果突出顯示 setName() 方法並搜索項目內的 declarations,則搜索結 果將包括擁有同名方法的所有類。在層次結構中搜索 moo() 的聲明將顯示圖 5 中所示的結果,限定搜索 范圍為當前類和它實現的接口(Cow)。

圖 5. 對 Declaration 的搜索結果

Implementors

通過搜索 implementors,您可以找到實現接口的類。此類搜索僅在突出 顯示接口名稱時起作用。如果突出顯示 Cow 並搜索接口,則 Hereford 類將是列在 Search 窗口中的惟 一結果。

Read access

對 read access 執行搜索將查找讀入所選變量的所有位置。在調試 大型類時我需要知道哪些其他代碼正在使用變量的值,我經常會使用到它。搜索清單 2 中的 name 變量 的讀訪問將給出圖 6 所示的結果。

圖 6. 對 Read-access 的搜索結果

Write access

和 read-access 一樣,write access 將搜索是否出現某個變量或字段,除非它把搜索限 制為查找是否出現了某個正在進行設置的變量。在清單 2 中搜索 name 將生成圖 7 所示的結果。

圖 7. 對 write access 的搜索結果

調整搜索結果

限制選項卡數目
如果 Search 窗口中顯示的選項卡數目太多,則可以通過單擊 Search 窗 口中的 Customize 來限制它們。在顯示的 Search Page Selection 列表中,可以清除不需要顯示的搜索 選項卡。

可以通過十分強大的方式過濾和修改結果中的 Search 選項卡,從而只顯示需要查看的 結果。如果單擊 Search 選項卡上的箭頭,則將顯示允許您按多個條件快速過濾結果的菜單。

圖 8. 過濾搜索條件

Java 搜索

Search 菜單項將顯示包含許多選項卡的搜索窗口。Java Search 選項卡是特定於語言的搜索示例 (如果安裝 PHP Development Tools 插件,則可以使用 PHP 搜索)。它將允許您通過在特定於語言的環 境中搜索字符串來執行強大的搜索。在 Java 編程語言中,這意味著您可以搜索類型、方法、字段等。然 後,您可以把此搜索限定到聲明、引用以及更多內容。圖 9 顯示了 Java Search 選項卡。

圖 9. Java Search 選項卡

時光倒流

我 喜歡食物,這意味著我迫不及待地要去吃午餐。外出吃飯是我一天中的美好時光之一,除非我在吃完午餐 後返回,坐下,然後發現單元測試並未成功運行。我會對自己說 “我記得在離開前已經開始測試了 ,發生了什麼事”?如果使用的是其他 IDE,我將開始使用 Undo 命令,希望它能把我帶回到代碼 運行的位置(在我外出午餐之前),但同時不會恢復一些重要的工作。

與本地歷史記錄比較

幸運的是,在 Eclipse 中,有一種更好的方法可以比較代碼並把代碼恢復到先前狀態。要使用此 功能,請突出顯示需要比較的文件並選擇 Compare With > Local History。將顯示 History 選項卡 (如圖 10 所示),同時顯示保存該文件的日期和時間。雙擊這些時間之一可以訪問 compare 編輯器。 使用 compare 編輯器,您可以手動恢復某項更改。

圖 10. 顯示文件保存時間的 History 選項卡

替換為本地歷史記錄

要把整個文件替換為本地歷史記錄中的版本,請單擊 Replace With > Local History,然後 選擇用來替換的版本。compare 編輯器使您能夠預覽更改,因此可以避免盲目替換。

創建新透視 圖

使用透視圖可以設置 IDE 的窗口和視圖,然後保存該設置。

使用右側透視圖

通 過使用不同的透視圖來執行不同的任務,您可以快速查看幫助您完成任務的窗口、編輯器或導航樹類型。 透視圖包括用於編寫 Java 代碼的 Java 透視圖、把 IDE 更改為顯示斷點和堆棧跟蹤的 Debug 透視圖以 及允許您快速比較代碼和系統庫的 Team Synchronizing 透視圖。要打開以上任何一個透視圖,只需單擊 Window > Open Perspective。

自定義工作環境

如果您過去習慣於使用其他 IDE,而現 在開始使用 Eclipse Europa,則可能習慣將某些視圖顯示在特定位置上。您可能希望 Package Explorer 顯示在右側而不是左側,而且您可能根本不希望看到 Outline 視圖或 Task 視圖。您可以修改 Java 透 視圖,但是如果把透視圖重置為默認設置,那麼您就遇到麻煩了。

結對編程(Pair programming )?
談到透視圖,我注意到大多數人都喜歡調整一下透視圖的默認值。如果不同的人經常進行修改 ,那麼最好能夠創建自己的透視圖:您可以設置一個自己專用的透視圖。就像在某些汽車中預設駕駛員座 椅和後視鏡位置一樣。

您可以不修改 Eclipse Europa 附帶的默認透視圖,而是創建一個新透視 圖 —— 由您專用 —— 並把該透視圖設置為首選項。

要設置自己的透視 圖,首先要找到一個透視圖作為起點,如 Java 透視圖。通過關閉視圖、打開其他視圖並在選項卡之中切 換,按照自己的方法進行設置。現在通過選擇 Window > Save Perspective As 來創建您自己的透視 圖,然後鍵入名稱。現在如果打開其他視圖,但是需要把自定義視圖返回到最初保存時的狀態,則可以選 擇 Window > Reset Perspective。

實用程序

清理

從 Callisto 到 Eclipse Europa,Eclipse 中的代碼清理實用程序得到了很大改進。通過使用 Europa 中的自動化代碼清理工具, 可以自動完成很多代碼任務,使源代碼不斷完善。您不但可以自定義代碼清理配置,而且還可以把它們保 存為可以與其他人共享的格式。在團隊環境中,導入代碼清理設置是非常重要的功能,因為它使整個團隊 都以相同的方式設定代碼格式並進行清理。

要清理代碼,請選擇 Source > Clean Up。如果已 設置配置文件,則可以從列表中選擇。

編輯和保存自定義配置文件

如果沒有為清理代碼設 置配置文件,則可以輕松地創建一個新配置文件。要創建自定義配置文件,請在 Clean Up 向導中單擊 Configure,如下所示:

圖 11. Clean Up 向導

單擊 Configure 後 ,將顯示如圖 12 中所示的窗口。

圖 12. 配置 Clean Up 向導

選中 Enable project specific settings 復選框,然後單擊 New。給配置文件命名(例如, MyCleanupProfile),然後單擊 Next。Eclipse Europa 將顯示配置文件編輯器。使用此編輯器,可以修 改設置並在右側的 Preview 窗格中查看更改,如圖 13 所示。完成設置後,單擊 OK 以保存新配置文件 。

圖 13. Preview 窗格

返回到 Clean Up 窗 口時,可以單擊 Finish 把清理配置文件應用到代碼中,也可以單擊 Next 預覽更改。預覽更改將使您可 以清除不需要添加到 Changes to be performed 列表中的所有內容。

在保存時執行清理

要確保始終以一致的方式清理代碼,您可以把 Eclipse Europa 配置為在保存工作時清理代碼。要在保存 時執行格式化和清理操作,請執行以下操作:

打開項目的屬性。

展開 Java Editor 並單 擊 Save Actions。

圖 14. 更改 Java 編輯器的保存操作

選中 Enable project specific settings 復選框。

選中 Perform the selected actions on save 和 Additional actions 復選框。

單擊 Configure 並選擇清理源代碼的選項。

讓 IDE 工作

通過在 Source 菜單中使用命令,為經常使用的代碼創建模板並且修改 build.xml 文件,可以使 Eclipse Europa IDE 開始工作。

Source 菜單

Source 菜單可以提供許多對生成代碼有用 的命令,包括 public accessor、構造函數和覆蓋方法。

Override/Implement 方法 此命令將幫 助您生成用於覆蓋基類方法的方法。生成 setter/getter 此命令將在當前編輯器中把私有字段的 public accessor 插入類中。生成委托方法 此命令將插入的方法允許您創建可以輕松公開內部功能的方法。 hashCode() 和 equals() 這些生成的 hashCode 和 equals() 方法使您可以選擇在比較等同性時需要使 用類中的哪些字段。這種方法非常適合業務對象,因為其等同性可能基於一些對象屬性。例如,如果兩個 對象的 id 字段相同,則可視為一個對象等於另一個對象。使用字段的構造函數 有時需要初始化對象的 構造函數中的某些字段。如果尚未創建任何構造函數,使用 IDE 生成它們。來自超類的構造函數 此命令 將插入在超類中執行鏡像的構造函數。像大多數其他 generate 命令一樣,這條命令允許您選擇在當前類 中需要包括超類的哪些構造函數。

模板

代碼模板允許您把代碼部分插入到編輯器中,這樣 可以節省鍵入時間並使您可以從可復制的代碼部分中獲益。要插入代碼片段,只需首先鍵入一個模板名稱 ,然後按 Ctrl+Space 組合鍵顯示模板的選擇列表。

您可以使用模板的 Preferences 窗口構建自 己的模板,訪問方法為展開 Java,展開 Editor,然後單擊 Templates,如圖 15 所示。要添加新模板, 請單擊 New,然後鍵入模板的名稱和描述。接下來,在 Pattern 字段中鍵入需要用作模板的代碼。

圖 15. 編輯 Java 模板

變量允許您把占位符 插入到自動執行某些工作的代碼模式中。考慮下面所示的 logger 的靜態聲明示例。

清單 3. 內 聯的 logger 聲明

  private static Log logger = LogManager().getLog (Hereford.class);

在此清單中,當使用 ${type} 變量時將自動插入 Hereford.class。

構建項目

在 Eclipse Europa 中設置自己的構建器將使您在構建項目時能夠執行特定的過 程。在構建器的首選項頁面中,可以指定構建器運行的順序,例如,如果設置生成源代碼的構建器,則可 以確保在運行項目的編譯程序之前運行該構建器。

構建有用的 Ant 文件
Targets 選項卡允 許您對在特定時間運行的構建目標進行細粒度的控制。使用此選項卡十分有好處,記住在構建 build 文 件時使用它。例如,應當把我的簡單示例改為一個包含 delete 任務的整潔的目標。那樣,我可以在新 Ant 構建器屬性中的 During a Clean 中指定這個整潔的目標。

指定要構建的 Ant 文件是把流程 集成到構建中的最簡單方法之一。下面的部分將展示如何添加一個可以自動把編譯好的源代碼打包成 Java Archive (JAR) 的構建器。

build.xml 文件

build.xml 文件中有一個目標和任務。 下面是開始處理 build.xml 文件的簡單方法:

創建新 XML 文件。在空文件中,按 Ctrl+Space 組合鍵以顯示常見任務列表,然後從列表中選擇 Buildfile template。

清單 4 顯示了刪除注釋 和額外目標並添加 jar 任務之後的 build.xml 文件。此任務將把編譯好的類文件打包到 dist 目錄中的 JAR 中。

清單 4. 簡單的 build.xml 文件

<?xml version="1.0"  encoding="UTF-8"?>
<project name="savingTime" default="dist">
   <description>
     A project showing all the features in Europa that  save time. 
  </description>
  <target name="dist">
     <delete file="dist/savingTime.jar" failonerror="false"/>
    <jar  destfile="dist/savingTime.jar">
      <fileset dir="bin">
         <include name="**/*.class" />
      </fileset>
     </jar>
  </target>
</project>

構建文件完成後, 選擇 Properties > Builders。

對於標准的 Java 項目,Java 構建器是列表中默認的惟一選 項。要添加 Ant 構建器,請從列表中選擇 Ant Builder,單擊 New,然後單擊 OK。

在下面所示 的 Edit launch configuration properties 窗口中,鍵入新構建器的名稱,例如 My Jar Builder。

圖 16. 啟動配置

單擊 Browse Workspace 以查找新創建的 build.xml 文件。

在 Refresh 選項卡中,選擇 Refresh resources upon completion。

選擇自動刷新資源意味著當構建完成時,IDE 將刷新工作區,以便使構建生成 的所有新文件或更新文件生效。

在 Targets 選項卡中,單擊 Auto Build 框旁邊的 Set Targets 並確保未選擇任何選項。

如果要自動刷新資源和自動構建,則會出現構建循環,因為只要刷新工 作區,構建就會啟動。

設置構建器後,保存它並單擊 OK。

工作集

工作集 是工作 區中的項目集,不但允許您把工作組織到相似的分組中,而且允許您限制搜索范圍和構建范圍。此外,您 可以設置項目浏覽器以顯示按工作集組織的項目。使用工作集組織工作區的一個例子是定義名為 UI Layer 和 Services Tier 的兩個工作集,您將在其中使用構成 UI 或服務的幾個項目。

創建工作 集

要添加新工作集,請執行以下操作:

右鍵單擊項目浏覽器,然後單擊 Assign Working Sets。

在下面所示的 Working Set Assignments 窗口中,單擊 New。鍵入工作集的名稱,然後選 擇工作集中需要包括的項目。

圖 17. Working Set Assignments

完成 後單擊 Finish,然後單擊 OK 以關閉 Working Set Assignments 窗口。

現在指定了工作集,您 可以按工作集組織 Package Explorer。

單擊位於視圖右上角的菜單,然後選擇 Top Level Elements > Working Sets。

從同一個菜單中,選擇 Configure Working Sets 以選擇需要在 Package Explorer 中查看的工作集。

按工作集搜索

正如先前所見,幾乎所有搜索命令都 允許您按工作集限定搜索范圍,這意味著在大型工作區中進行搜索可能花費更少的時間。可用於搜索的常 見工作集選項允許您一次選擇多個選項。

按工作集構建

如果在 Project 窗口中取消選中 Build Automatically 復選框,則可以手動構建項目。您還可以手動構建工作集,在大型工作區中,這樣 做能節省時間。手動構建工作集將限制 Eclipse 僅構建工作集中定義的項目,而不是構建整個工作區。

輕松重構

在大多數項目中,代碼重構對於添加特性、修復缺陷或者完成迭代非常必要。 Eclipse 已經提供了有效的重構工具,但是 Eclipse Europa 已經向 Java 工具中添加了更多重構工具。

參數-對象重構

參數-對象重構 將使您可以輕松地引用參數對象,從而簡化方法簽名。考 慮清單 5。

清單 5. 在參數-對象重構之前

public class Barn  {

  private String color;
  private int stories;
  private  int numberOfDoors;

  private Barn() {}

  public static Barn  createBarn(String color, int stories, int numberOfDoors)
  {
    Barn  b = new Barn();

    b.color = color;
    b.stories =  stories;
    b.numberOfDoors = numberOfDoors;

    return b;
  }

  /* Rest of the class ... */
}

在構建 Barn 對象 時,我必須指定許多內容。但是我可能需要在將來指定一些內容,從而使工廠方法(createBarn())更聰 明,而且我不希望總是更改方法簽名或者面對大量重載的 createBarn() 方法。

要引入參數對象 ,右鍵單擊該方法 —— 在本例中為 createBarn() —— 並選擇 Refactor > Introduce Parameter Object。在 Introduce Parameter Object 窗口中鍵入參數對象的名稱(例如 BarnInfo),如圖 18 所示。如果需要在新類中創建 public accessor,請選中 Create getters 和 Create setters 復選框。可以根據您的目的確定是把新類創建為頂級類還是把新類創建為正在修改的類 的內部類(在本例中為 Barn)。

圖 18. 引入參數對象

您可以把原始方法保 留為委托並同時把它標記為不贊成。如果認為其他人可能要在您的代碼庫外使用舊方法,並且您需要擴展 使類具有向後兼容性,那麼這樣做可能是個好主意。單擊 Preview 以查看將要做出的所有修改,這樣您 可以撤銷不需要的內容。

重構後,新類和更改將類似如下所示的內容。

清單 6. 參數-對 象重構後

public class Barn {

  private String color;
   private int stories;
  private int numberOfDoors;

  private Barn()  {}

  public static Barn createBarn(BarnInfo barnInfo)
  {
     Barn b = new Barn();

    b.color = barnInfo.getColor();
     b.stories = barnInfo.getStories();
    b.numberOfDoors =  barnInfo.getNumberOfDoors();

    return b;
  }
  /* Rest of  the class... * 
}

內聯重構

內聯重構(Inline refactoring)是一個 智能的重構工具,它將嘗試把分配的本地值放到直接內聯的本地值中,同時跳過變量的創建和使用。清單 7 中的示例代碼演示了正被創建的本地變量 —— message —— 並且在後面的 System.out.println() 調用中使用它。

清單 7. 聲明本地變量

public void  moo() {
  String message = "My name is " + name + ". Moo!";
   System.out.println(message);
}

要刪除此本地變量,請在 System.out.println 方法中單擊 message,然後選擇 Refactor > Inline。Eclipse 將提示您替換出現的變量,然後可以 單擊 Preview 或 OK。Preview 顯示將要執行的更改,這樣您可以撤銷不希望執行的修改。重構後,代碼 將類似清單 8 所示:

清單 8. 執行內聯重構後

public void moo() {
   System.out.println("My name is " + name + ". Moo!");
}

結束語

Eclipse Europa 的很多功能可以幫助您更快地完成工作。從重構到搜索再到自定義 IDE 本身, 您可以獲得很多工具來提高生產力。

本教程中列出的許多功能是 Eclipse Europa 的新增功能, 而其他功能也獲得了很好的改進。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved