欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

AndroidStudio中代碼重構(gòu)菜單Refactor功能有哪些

這篇文章主要介紹AndroidStudio中代碼重構(gòu)菜單Refactor功能有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)是專(zhuān)業(yè)的邯山網(wǎng)站建設(shè)公司,邯山接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行邯山網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

在AS的主菜單欄中有一項(xiàng)“Refactor”下拉菜單,點(diǎn)擊該下拉菜單,會(huì)看到如下的界面,菜單中的每一項(xiàng),都是為代碼重構(gòu)提供的一項(xiàng)自動(dòng)實(shí)現(xiàn)功能。這么多的功能項(xiàng),可見(jiàn)AS在代碼重構(gòu)功能上的強(qiáng)大,下面我們對(duì)這些功能項(xiàng)一一進(jìn)行介紹。另外,還可以在編輯界面中點(diǎn)擊右鍵,在彈出的菜單中也可以找到“Refactor”。

1、Refactor This

作用:重構(gòu)當(dāng)前。操作此項(xiàng),會(huì)顯示對(duì)當(dāng)前光標(biāo)選中處可行的重構(gòu)方法。

示例:選擇了類(lèi)名“RefactorTest”,操作“Refactor This”后,顯示了可執(zhí)行的重構(gòu)方法列表,可以通過(guò)選擇數(shù)字來(lái)執(zhí)行對(duì)應(yīng)的方法。

2、Rename

作用:對(duì)光標(biāo)選中項(xiàng)進(jìn)行重命名。不僅可以對(duì)類(lèi)中的成員變量進(jìn)行重命名,還能對(duì)文件名,包名等進(jìn)行重命名,Module中與之相關(guān)聯(lián)的所有地方都會(huì)一起修改,而不用一一手動(dòng)修改。

快捷鍵:Shift + F6

示例:在紅框中輸入修改后的名稱(chēng),并按Enter鍵即可。

3、Rename File

作用:修改當(dāng)前編輯界面顯示的文件的文件名。就相當(dāng)于鼠標(biāo)選中該文件,并執(zhí)行“Rename”方法。

示例:在顯示的對(duì)話(huà)框中輸入新文件名??梢栽谙路降倪x項(xiàng)框中選擇修改范圍,引用該文件的地方,注釋?zhuān)址卸伎梢赃x擇一起修改。

4、Change Signature

作用:修改方法、類(lèi)、構(gòu)造函數(shù)的簽名,其實(shí)就是修改所選項(xiàng)的一些屬性。

快捷鍵:Ctr l+ F6

示例:如下展示了一個(gè)方法重構(gòu)前,重構(gòu)過(guò)程,以及重構(gòu)后的情形(以修改一個(gè)方法簽名為例)。

重構(gòu)前:

private void testChangeSignature(int first, int second) { }

選中方法名后,執(zhí)行該重構(gòu)方法后,會(huì)彈出如下對(duì)話(huà)框,可以對(duì)該方法各種屬性進(jìn)行修改,添加/刪除參數(shù),調(diào)整參數(shù)順序,新增/刪除異常等。

重構(gòu)后:

public void testChangeSignature(int second, int first, String third) throws NullPointerException {}

5、Type Migration

作用:類(lèi)型遷移,即對(duì)變量數(shù)據(jù)類(lèi)型,或者方法的返回類(lèi)型進(jìn)行修改。前面介紹了對(duì)文件名,包名,變量名等進(jìn)行修改,這里對(duì)類(lèi)型進(jìn)行修改。

快捷鍵:Ctrl + Shift + F6

重構(gòu)前:

private int age = 10; public RefactorTest(int age) { this.age = age; }

選中要修改的類(lèi)型,執(zhí)行該重構(gòu)方法,會(huì)彈出對(duì)話(huà)框,根據(jù)需要編輯類(lèi)型,選中作用范圍即可。指定范圍內(nèi),與該變量相關(guān)聯(lián)處都會(huì)被修改。

重構(gòu)后(由于從int修改到String,所以還需要手動(dòng)修改變量值):

private String age = "10"; public RefactorTest(String age) { this.age = age; }

6、Make Static

作用:給內(nèi)部類(lèi)或者方法添加static關(guān)鍵字。示例比較簡(jiǎn)單,就不做演示了。

7、Convert To Instance Method

作用: 轉(zhuǎn)換為實(shí)例方法,即將靜態(tài)方法去掉static關(guān)鍵字。

8、Move

功能:移動(dòng)文件到指定路徑

快捷鍵:F6

9、Copy

作用:在指定包中拷貝一份當(dāng)前文件

快捷鍵:F5

10、Safe Detele

作用:安全刪除,可用于對(duì)方法/字段等進(jìn)行快速刪除,會(huì)刪除掉與之相關(guān)聯(lián)的引用。

快捷鍵:Alt + Delete

11、Extract

(1)Variable

作用:提取變量。這一點(diǎn)在碰到比較長(zhǎng)的表達(dá)式時(shí)經(jīng)常用到,將看起來(lái)很長(zhǎng)很復(fù)雜的表達(dá)式提取出來(lái)作為一個(gè)變量表示。

快捷鍵:Ctrl + Alt + V

重構(gòu)前:我們常會(huì)看到這樣的代碼

public void testExtractVariable() { Log.i("demo", "age=" + getAaaaaaaaaaaaaaaaaaaaaaaaaaaAge() + ";name=" + getNnnnnnnnnnnnnnnnnnnnnnname()); } private int getAaaaaaaaaaaaaaaaaaaaaaaaaaaAge() { return age; } private String getNnnnnnnnnnnnnnnnnnnnnnname() { return name; }

第二行的要打印的信息表達(dá)式太長(zhǎng)了,希望單獨(dú)提取出來(lái)用一個(gè)變量表示。本示例中鼠標(biāo)停留在第2行“getAaaaaaaaaaaaaaaaaaaaaaaaaaaAge”處,執(zhí)行該重構(gòu)方法,會(huì)彈出如下紅框部分對(duì)話(huà)框,顯示的是選中表達(dá)式相關(guān)的可提取部分,根據(jù)需要選擇要提取的部分即可。

重構(gòu)后:

public void testExtractVariable() { String msg = "age=" + getAaaaaaaaaaaaaaaaaaaaaaaaaaaAge() + ";name=" + getNnnnnnnnnnnnnnnnnnnnnnname(); Log.i("demo", msg);}private int getAaaaaaaaaaaaaaaaaaaaaaaaaaaAge() { return age;}private String getNnnnnnnnnnnnnnnnnnnnnnname() { return name;}

(2)Constant

作用:提取常量,將表達(dá)式中的值提取為常量。

快捷鍵:Ctrl + Alt +C

重構(gòu)前:

public void testExtractConstant() { String filename = "sdcard"; }

重構(gòu)后:

public static final String SDCARD = "sdcard"; public void testExtractConstant() { String filename = SDCARD; }

(3)Filed

作用:提取字段,將局部變量提取為全局變量。

快捷鍵:Ctrl + Alt +F

重構(gòu)前:

public void testExtractField() { String name ="zhangsan";}

重構(gòu)后:

private final String string = "zhangsan"; public void testExtractField() { }

(4)Parameter

作用:將局部變量提取為方法的參數(shù)。

快捷鍵:Ctrl + Alt +P

重構(gòu)前:

public void testExtractParameter() { printName();}private void printName(){ String name = "zhangsan"; Log.i("demo","My name is:"+name);}

重構(gòu)后:

public void testExtractParameter() { printName("zhangsan");}private void printName(String name){ Log.i("demo","My name is:"+ name); }

(5)Functional Parameter ( 函數(shù)式參數(shù) )Ctrl + Alt + Shift + P

(6)Parameter Object

作用:將參數(shù)提取為一個(gè)對(duì)象。該功能主要是針對(duì)參數(shù)比較多的時(shí)候,將這些參數(shù)提取出來(lái)作為一個(gè)Bean實(shí)例傳入。

重構(gòu)前:

private void testExtractParamObject() { String info = getInfo("zhangshan", 20, 180f);}private String getInfo(String name, int age, float height) { return "name=" + name + ";age=" + age + ";height=" + height;}

重構(gòu)后:

private void testExtractParamObject() { String info = getInfo(new Person("zhangshan", 20, 180f));}private String getInfo(Person person) { return "name=" + person.getName() + ";age=" + person.getAge() + ";height=" + person.getHeight();}private static class Person { private final String name; private final int age; private final float height; private Person(String name, int age, float height) { this.name = name; this.age = age; this.height = height; } public String getName() { return name; } public int getAge() { return age; } public float getHeight() { return height; }}

(7)Mehtod

作用:提取為方法

快捷鍵:Ctrl + Alt +M

重構(gòu)前:

public void testExtractMethod() { List<String> nameList = new ArrayList<>(); nameList.add("zhangshan"); nameList.add("lisi"); nameList.add("wangwu"); int size = nameList.size();}

鼠標(biāo)光標(biāo)選中第2~5行后執(zhí)行該重構(gòu)方法

重構(gòu)后:

public void testExtractMethod() { List<String> nameList = getNameList(); int size = nameList.size();}@NonNullprivate List<String> getNameList() { List<String> nameList = new ArrayList<>(); nameList.add("zhangshan"); nameList.add("lisi"); nameList.add("wangwu"); return nameList;}

(8)Type Parameter

(9)Method Object

作用:將該選中的內(nèi)容提取為一個(gè)方法,并提取到一個(gè)獨(dú)立的類(lèi)中。和“Method”很類(lèi)似,不同的是提取的方法最后放在哪里。

重構(gòu)前:

public void testExtractMethod() { List<String> nameList = new ArrayList<>(); nameList.add("zhangshan"); nameList.add("lisi"); nameList.add("wangwu"); int size = nameList.size();}

重構(gòu)后:

public void testExtractMethod() { List<String> nameList = Utils.invoke(); int size = nameList.size();}private static class Utils { private static List<String> invoke() { List<String> nameList = new ArrayList<>(); nameList.add("zhangshan"); nameList.add("lisi"); nameList.add("wangwu"); return nameList; }}

(10)Delegate

作用:提取為一個(gè)代理類(lèi)。

重構(gòu)前:

public class RefactorTest{ public void testExtractInterface() { System.out.print("testExtractInterface"); }}

重構(gòu)后:

public class RefactorTestDelegate { public RefactorTestDelegate() { } public void testExtractInterface() { System.out.print("testExtractInterface"); }}public class RefactorTest{ private final RefactorTestDelegate refactorTestDelegate = new RefactorTestDelegate(); public void testExtractInterface() { refactorTestDelegate.testExtractInterface(); }}

(11)Interrface

作用:提取為接口。

重構(gòu)前:

public class RefactorTest { public void testExtractInterface() { System.out.print("testExtractInterface"); }}

public修飾的方法才可以被提取到接口中。

重構(gòu)后:

interface IRefactorTest { void testExtractInterface();}public class RefactorTest implements IRefactorTest { @Override public void testExtractInterface() { System.out.print("testExtractInterface"); }}

(12)Superclass

作用:將指定內(nèi)容提取到父類(lèi)中。

重構(gòu)前:

private void testExtractSupperclass() { testSuper();}public void testSuper() { System.out.print("testSuper");}

重構(gòu)后:

//=======RefactorTest extends RefactorTestBase=======private void testExtractSupperclass() { testSuper();}class RefactorTestBase { public void testSuper() { System.out.print("testSuper"); }}

12、Inline

作用:轉(zhuǎn)換為內(nèi)聯(lián)、方法鏈形式的調(diào)用。

快捷鍵:Ctrl + Alt +N

重構(gòu)前:

private void testInline() { int a = 100; int b = 200; System.out.print(add(a, b));}private int add(int a, int b) { System.out.print("a=" + a + ";b=" + b); return a*2 + b*3;}

重構(gòu)后:

private void testInline() { int a = 100; int b = 200; System.out.print("a=" + a + ";b=" + b); System.out.print(a * 2 + b * 3); }

原先需要調(diào)用一個(gè)方法,重構(gòu)后直接把該方法中的代碼給復(fù)制過(guò)來(lái)了。因?yàn)樯厦孢x中的是內(nèi)聯(lián)所有的,并且刪除該方法,所以add方法也就被刪除了。

13、Find and Replace Code Duplicates

14、Invert Boolean

作用:轉(zhuǎn)換Boolean值,將當(dāng)前false/true的值進(jìn)行轉(zhuǎn)化為相反的值。

重構(gòu)前:

private boolean isEmpty(String str) { if (str != null && str.length() == 0) { return false; } return true; }

重構(gòu)后:

private boolean isNotEmpty(String str) { if (str != null && str.length() == 0) { return true; } return false; }

15、Pull Members Up

作用:將子類(lèi)的成員上移到父類(lèi)中。

重構(gòu)前:

public class RefactorBase {}public class RafactorSub extends RefactorBase { int age = 10; public void printSub() { System.out.print(age); }}

重構(gòu)后:

public class RefactorBase { int age = 10; public void printSub() { System.out.print(age); }}public class RafactorSub extends RefactorBase {}

16、Push Members Down

作用:將父類(lèi)中的成員下移到子類(lèi)中,正好是“Pull Members Up”的反向操作。

重構(gòu)前:

public class RefactorBase { int age = 10; public void printSub() { System.out.print(age); }} public class RafactorSub extends RefactorBase { }

重構(gòu)后:

public class RefactorBase {}public class RafactorSub extends RefactorBase { int age = 10; public void printSub() { System.out.print(age); }}

17、Use Interface Where Possible

18、Replace Inheritance with Delegation

作用:使用代理替代繼承。在java中,提倡使用組合,而不是繼承。

重構(gòu)前:

public abstract class AbsClass { public abstract void print();}public class ClassWrapper extends AbsClass { @Override public void print() { System.out.print("print"); }}private void testReplaceInheritanceWithDelegation() { new ClassWrapper().print();}

重構(gòu)后:

public abstract class AbsClass { public abstract void print();}public class ClassWrapper { private final ClassImpl absClass = new ClassImpl(); public void print() { absClass.print(); } private class ClassImpl extends AbsClass { @Override public void print() { System.out.print("print"); } }}public class RefactorTest { private void testReplaceInheritanceWithDelegation() { new ClassWrapper().print(); }}

這一部分有點(diǎn)像Android中Context,ContextWrapper,ContextImpl類(lèi)之間的關(guān)系。

19、Remove Middleman

作用:移除中間人,其實(shí)就是移除中間過(guò)程。

重構(gòu)前:

public class RefactorTest { private void testRemoveMiddleMan() { BookManager bookManager = new BookManager(); bookManager.addBook("java"); } public static class BookManager { private List<String> mBookList = new ArrayList<>(); private void addBook(String bookName) { mBookList.add(bookName); } }}

重構(gòu)后:

public class RefactorTest { private void testRemoveMiddleMan() { BookManager bookManager = new BookManager(); bookManager.getmBookList().add("java"); } public static class BookManager { private List<String> mBookList = new ArrayList<>(); public List<String> getmBookList() { return mBookList; } }}

對(duì)比重構(gòu)前和重構(gòu)后會(huì)發(fā)現(xiàn),添加book這個(gè)動(dòng)作,從由BookManager的addBook方法來(lái)執(zhí)行,變成了直接有mBookList來(lái)執(zhí)行了。這個(gè)addBook就是這個(gè)MiddleMan,顯得多余,可以?xún)?yōu)化掉。實(shí)際上優(yōu)化后就變成一個(gè)inline方式了,可以對(duì)比前面講到的“Inline”。

20、Wrap Method Return Value

作用:封裝返回值

public class RefactorTest { private void testWrapReturnValue() { String name = getName(); } private String getName() { return "zhangsan"; }}

重構(gòu)后:

public class RefactorTest { private void testWrapReturnValue() { String name = getName().getValue(); } private Person getName() { return new Person("zhangsan"); } public class Person { private final String value; public Person(String value) { this.value = value; } public String getValue() { return value; } }}

21、Convert Anonymous to Inner

作用:將匿名內(nèi)部類(lèi)轉(zhuǎn)為內(nèi)部類(lèi)。

重構(gòu)前:

private void testConvertAnonymousToInner(){ view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });}

重構(gòu)后:

public class RefactorTest{ View view; private void testConvertAnonymousToInner(){ view.setOnClickListener(new MyOnClickListener()); } private static class MyOnClickListener implements View.OnClickListener { @Override public void onClick(View v) { } }}

22、Encapsulate Fields

作用:封裝字段,用于生成Getter/Setter

重構(gòu)前:

public String name = "zhangsan"; private void testEncapsulateFields() { System.out.println(name); }

通過(guò)該對(duì)話(huà)框,可以選擇要封裝的字段,設(shè)置修飾符等。默認(rèn)選擇時(shí),name字段的修飾符從public變成了private,這也就避免了外部類(lèi)通過(guò)實(shí)例直接訪(fǎng)問(wèn)它。

重構(gòu)后:

private String name = "zhangsan";private void testEncapsulateFields() { System.out.println(getName());}public String getName() { return name;}public void setName(String name) { this.name = name;}

23、Replace Temp With Query

24、Replace Constructor with Factory Method

作用:將構(gòu)造方法替換為工廠(chǎng)方法

重構(gòu)前:

public class MyClass { private String title; private String message; private String sure; private String cancel; public MyClass(String title, String message, String sure, String cancel) { this.title = title; this.message = message; this.sure = sure; this.cancel = cancel; }}public class RefactorTest { private void testReplaceConstructorWithFactory(Context context) { MyClass myClass = new MyClass("title", "message", "sure", "cancle"); }}

重構(gòu)后:

public class MyClass { private String title; private String message; private String sure; private String cancel; private MyClass(String title, String message, String sure, String cancel) { this.title = title; this.message = message; this.sure = sure; this.cancel = cancel; } public static MyClass createMyClass(String title, String message, String sure, String cancel) { return new MyClass(title, message, sure, cancel); }}public class RefactorTest { private void testReplaceConstructorWithFactory(Context context) { MyClass myClass = MyClass.createMyClass("title", "message", "sure", "cancle"); }}

原先public修飾的構(gòu)造函數(shù),已經(jīng)變成private了,MyClass類(lèi)只能通過(guò)工廠(chǎng)方法來(lái)獲取實(shí)例,而無(wú)法再直接new了。

25、Replace Constructor with Builder

作用:將構(gòu)造方法替換為Builder方式

重構(gòu)前:

public class RefactorTest{ private void testReplaceConstructorWithBuilder(Context context){ MyDialog dialog = new MyDialog(context,"title","message","sure","cancle"); }}public class MyDialog extends Dialog { private String title; private String message; private String sure; private String cancel; public MyDialog(@NonNull Context context) { super(context); } public MyDialog(Context context, String title, String message, String sure, String cancel) { super(context); this.title = title; this.message = message; this.sure = sure; this.cancel = cancel; }}

重構(gòu)后:

public class RefactorTest { private void testReplaceConstructorWithBuilder(Context context) { MyDialog dialog = new MyDialogBuilder()  .setContext(context)  .setTitle("title")  .setMessage("message")  .setSure("sure")  .setCancel("cancle")  .createMyDialog(); }}public class MyDialogBuilder { private Context context; private String title; private String message; private String sure; private String cancel; public MyDialogBuilder setContext(Context context) { this.context = context; return this; } public MyDialogBuilder setTitle(String title) { this.title = title; return this; } public MyDialogBuilder setMessage(String message) { this.message = message; return this; } public MyDialogBuilder setSure(String sure) { this.sure = sure; return this; } public MyDialogBuilder setCancel(String cancel) { this.cancel = cancel; return this; } public MyDialog createMyDialog() { return new MyDialog(context); }}

看到這里,我們應(yīng)該能夠聯(lián)想到AlertDialog類(lèi)中的Builder了。將構(gòu)造函數(shù)的形式,轉(zhuǎn)變?yōu)榱私ㄔ煺吣J降男问?,這樣不會(huì)拘泥于構(gòu)造函數(shù)的參數(shù)個(gè)數(shù),參數(shù)類(lèi)型的限制,從而靈活設(shè)置屬性。

26、Generify

作用:泛型重構(gòu),自動(dòng)添加泛型的參數(shù)。

重構(gòu)前:

private void testGenerify() { List list = new ArrayList(); list.add("one"); list.add("two"); list.add("three"); }

重構(gòu)后:

private void testGenerify() { List<String> list = new ArrayList<String>(); list.add("one"); list.add("two"); list.add("three");}

27、Migrate

28、Internationalize(國(guó)際化)

29、Remove Unused Resources

作用:一直不用的資源

示例:1.jpg是一個(gè)沒(méi)有被應(yīng)用的文件。

在執(zhí)行該重構(gòu)方法后,1.jpg就被刪除了。

以上是“AndroidStudio中代碼重構(gòu)菜單Refactor功能有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

網(wǎng)頁(yè)標(biāo)題:AndroidStudio中代碼重構(gòu)菜單Refactor功能有哪些
文章地址:http://chinadenli.net/article26/jgijcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、搜索引擎優(yōu)化用戶(hù)體驗(yàn)、自適應(yīng)網(wǎng)站、企業(yè)建站網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
久久国产精品热爱视频| 六月丁香六月综合缴情| 好吊妞视频只有这里有精品| 日韩欧美91在线视频| 亚洲日本加勒比在线播放| 色综合视频一区二区观看| 日韩欧美好看的剧情片免费| 狠色婷婷久久一区二区三区| 狠狠做五月深爱婷婷综合| 日韩人妻有码一区二区| 欧美精品一区久久精品| 东京不热免费观看日本| 少妇特黄av一区二区三区| 麻豆最新出品国产精品| 国产精品一区二区视频成人| 国产户外勾引精品露出一区| 草草视频福利在线观看| 色婷婷中文字幕在线视频| 亚洲视频一区二区久久久| 欧美又大又黄刺激视频| 亚洲综合精品天堂夜夜| 国产日韩欧美国产欧美日韩| 日韩欧美黄色一级视频| 九九热视频免费在线视频| 又黄又爽禁片视频在线观看| 九七人妻一区二区三区| 黄片三级免费在线观看| 正在播放国产又粗又长| 国产又粗又猛又长又大| 欧美一区日韩二区亚洲三区| 黄片在线免费观看全集| 熟女中文字幕一区二区三区| 我的性感妹妹在线观看| 日本午夜乱色视频在线观看| 久久大香蕉一区二区三区| 午夜精品一区免费视频| 丝袜视频日本成人午夜视频| 中国美女偷拍福利视频| 久久精品国产亚洲av麻豆| 婷婷色网视频在线播放| 久久机热频这里只精品|