Android Studio 技巧之【Rename】

快捷鍵

Shift + F6

Android Studio 里重命名變量、字段、方法、類、包的快捷方式。

描述

在代碼中重命名變量、字段、方法、類、包,是一件要小心對待的工作,所有的修改一定確保對上下文有意義。

確保對上下文有意義一般分兩種情況。

1、要保證全部改名。

無論要改名的是變量、字段、方法、類還是包, 這些變量、字段、方法、類、包可能已經在整個程序的多處被引用了,所以要改名必須在所有的地方全部修改,不能遺漏。

2、要做有意義的修改,不能無腦似地見了和要改名的字符串一樣的字符串就改。

一個和要改名的變量名相同的字符串,可能在代碼的別的地方僅僅是另一個字符串的一部分,這種情況就不能修改。

針對第一種情況,似乎用全文替換可以快速完成改名的工作。但是全文替換,是見了相同的字符串就改,這樣的話,對第二種情況又不合適。這種粗暴的替換有可能修改了不該修改的字符串,造成很隱蔽的難以發現的BUG。

所以,要改名的話,一般是用在整個工程文件中或者當前文件中全文查找的方式,找出所有可能要改名的字符串,一個個看,一個個修改,該改的改,不該改的地方不改。

但是細致是一方面,在細致的同時也要追求工作效率。在Android Studio中用Shift + F6 快捷鍵可以讓我們高效地完成重命名的工作,而且該操作能確保重命名對上下文有意義,不會無腦替換掉所有文件中的名字。

雖然這個快捷鍵功能很強大,但卻不是用了以后直接按Enter那么簡單,依然需要手工干預,根據不同的情況選擇哪些改,哪些不改。

所以如果你已經看到這里,希望你認真地看下去。和前面文章中介紹的哪些快捷鍵不一樣,這個快捷鍵用好了,可以極大地提高效率,但是如果用不好,帶來的麻煩甚至多過其帶來的方便。

使用

下面看示例代碼:

上圖的代碼中首先定義了一個全局變量sVar,這個全局變量sVarmethod2method3都被引用。

method1中又定義一個本地變量,名字也叫sVar

在每個方法中還有被“” 括起來的文本字符串里的sVar,如method2method3 Log語句里的"sVar: "以及method1里的本地變量sVar的值Local sVar.

現在要將全局變量sVar改名為gVar.

例子1

僅僅將全局變量sVar改名為gVar,其它所有注釋和文本字符串里的同名字符串全部不改變。

也就是改變全局變量sVar的定義的部分和在其它地方引用它的部分,即上圖中高亮的的sVar聲明處,method2method3Log語句中引用sVar的三個地方。

1、將光標定位到public String sVar行中的sVar
,按 Shift + F6

圖中可以看到,public String sVar行中的sVar被紅框圍住,代表要對其改名,其它兩個引用處也被高亮選擇了。

屏幕上同時還有一個彈窗,彈窗里上面四行是給出的建議修改的名稱。這時候其實直接改名后按Enter即可,但是強烈建議不要這樣做。

保險的做法是根據最下面的提示Press Shift+F6 to show dialog with more option,繼續按 Shift + F6

2、再次按 Shift + F6

又出現一個彈窗,彈窗里的文本框是讓我們輸入要改的名字。

重要的是下面兩個Checkbox

第一個是Sesrch in comments and strings, 意思是在注釋和文本字符串里搜索。 如果選擇了這個選項,那么所有在注釋和文本字符串里出現的sVar都會被包括進來修改。

第二個是Search for text occurrences, 意思是在字面意義上的搜索。 這個選項沒有什么用,因為 Shift + F6 實際上是一個代碼重構的快捷鍵,不是做文本替換的命令。所以選不選這個選項都不起作用。

在這個例子中,我們不想修改注釋和文本字符串里的同名字符串,所以我們不選Sesrch in comments and strings這個選項。

3、將這兩個選項前的Checkbox都清空。并且將文本框里的sVar改為gVar

4、點擊Refactor按鈕。

現在可以看到,應該修改的三個地方全部被修改好了。

文本字符串里的sVar沒有被修改,因為我們沒有選擇Sesrch in comments and strings這個選項。

method1里的sVar則原封不動。因為method1里的sVar實際上是另外一個本地變量,和要修改的全局變量僅僅是名字相同,完全是兩回事。

這就是符合上下文意義的正確的改名,確保了全部修改和正確的有意義的修改。

動畫演示

如果你看到這里,應該已經了解了Shift + F6 的方便和高效,但是聰明的你也應該注意到,在給全局變量sVar改名的同時,其實method2method3里的兩個Log語句中的字符串sVar也應該同時修改。不然的話,雖然改名沒有造成程序運行的BUG,但是卻造成了功能上的BUG。

如果不同時修改兩個LOG語句中的sVar, 那打印出來的LOG就指鹿為馬了,因為現在sVar已經改名叫gVar了。

下面我們就用第二個例子來看,怎么做到一次完美的改名。

例子2

將全局變量sVar改名為gVar,同時修改所有相關注釋和文本字符串里的sVar

1、和例子1一樣,將光標定位到public String sVar行中的sVar上,按Shift + F6

2、再次按Shift + F6

3、這次因為要修改文本字符串里的sVar。所以我們勾選
Sesrch in comments and strings, 意思是在注釋和文本字符串里搜索。 選擇了這個選項,那么所有在注釋和文本字符串里出現的sVar都會被包括進來修改。

同時在文本框中將sVar改為gVar

4、點擊Refactor按鈕。

這次在Android Studio的下部出現了一個如圖的窗口。

這個窗口里,標識出了所有可能需要修改的地方,

最上面的如上圖的部分,說明了要改名的變量。

中間如上圖的這一塊說明,在55行method2的Log語句引用了sVar,需要修改。 下面method3中也有一個引用。可以點擊向右的箭頭將其打開,查看詳細的信息。

上面這兩處是我們肯定要修改的,所以我們不去管它。

因為這次我們選擇了Sesrch in comments and strings,所以我們最關心的是最下面的部分,看下圖。

這是說sVar在注釋,文本字符串和非代碼文本中出現了三次。 很明顯,這是我們要仔細查看并處理的地方。

5、點擊該行文字前面的向右的箭頭,將其打開。

看到了吧,這里是說在method1method2method3中的注釋或者文本字符串中各有一個sVar.

6、點擊第一個method1前的箭頭將其打開。

這里指明在50行的String sVar = "Local sVar";里有一個sVar

這里我們不需要修改。所以必須將其標識為不修改。

7、在method1() 1 usage這一行上右擊,彈出下面的彈窗。

8、在彈出的菜單上有ExcludeRemove這兩個選項。隨便點擊任意一個都可以。這里我們點擊Remove將其移除。

現在看到屏幕上只有method2method3了,分別標明在55行和59行各有一個LOG語句,其中有sVar可能需要修改。

而這兩個是我們確實需要修改的。所以不做任何動作,繼續保留。

9、點擊Do Refactor按鈕。

現在,可以看到最后的結果完全符合我們的要求。

全局變量的定義,兩個引用以及在method2method3中兩個LOG語句里的文本字符串中的sVar都被正確地改成了gVar

動畫演示

總結

Shift + F6 快捷鍵,可以快速重命名變量、字段、方法、類、包。并且可以確保重命名對上下文有意義,不會無腦替換掉所有文件中的名字。

但是使用該快捷鍵需要格外的細心,需要根據代碼不同的情況手工加以處理。


更多Android Studio技巧

簡書

Android Studio 技巧之【Join Lines and Literals】

Android Studio 技巧之【Delete Line】

Android Studio 技巧之【Move Methods】

Android Studio 技巧之【Duplicate Line】

Android Studio 技巧之【Move Lines Up Down】

Android Studio 技巧之【Sublime Text Multi Selection】

Android Studio 技巧之【Column Selection】

Android Studio 技巧之【Extract Parameter】

Android Studio 技巧之【Extract Constant】

Android Studio 技巧之【Extract Method】

Android Studio 技巧之【Extract Field】

Android Studio 技巧之快速抽取變量【Extract Variable】

Android Studio 技巧之【Extract Resource】

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容