第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

自動(dòng)生成替換方法

自動(dòng)生成替換方法

幕布斯6054654 2023-04-26 17:17:08
在為我正在制作的應(yīng)用程序創(chuàng)建語言文件時(shí),我遇到了很多樣板代碼。我目前有一個(gè)包含所有語言字符串的類,然后我使用反射將這些字符串寫入文件。我經(jīng)常遇到的是我的字符串中有某些我想替換的占位符,例如我可能有這樣的字符串:public static String USER_INFO = "Username: %name% money: %balance%";我想要實(shí)現(xiàn)的是生成一些基于注釋的方法,例如我可以使用 lombok 生成 getters/setters 和其他方法?;谏厦娴淖址視?huì)有一個(gè)名為Arguments(正確地應(yīng)該命名為 Replacers 或更有意義的東西)的注釋,如下所示:@Retention(RetentionPolicy.SOURCE)@Target(ElementType.FIELD)public @interface Arguments {  String[] value();}我想做的是添加這樣的注釋:@Arguments(        value = {"%balance%", "%name%"})public static String USER_INFO = "Username: %name% - money: %balance%";并獲取以下自動(dòng)生成的替換方法:public static String USER_INFONameReplacement(String name) {    return USER_INFO.replace("%name%", name);}public static String USER_INFOAllReplacement(String name, String balance) {    return USER_INFO.replace("%name%", name).replace("%balance%", balance);}public static String USER_INFOBalanceReplacement(String balance) {    return USER_INFO.replace("%balance%", balance);}但我似乎無法讓它注冊(cè)?所以我的第一個(gè)問題是,如果我想實(shí)現(xiàn)這個(gè)目標(biāo),AbstractProcessor 是可行的方法嗎?如果不是那怎么辦?如果是,那為什么不注冊(cè)?我正在使用 IntelliJ 并進(jìn)入設(shè)置 -> 構(gòu)建 -> 編譯器并將注釋處理器更改為啟用并將處理器路徑設(shè)置為我的 SuggestProcessor
查看完整描述

2 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

Java Annotation Processing (APT) 插件旨在基于其他類生成代碼。這些類最終位于生成的源文件夾中,該文件夾隨后也會(huì)被編譯。這些 APT 插件是從類路徑/構(gòu)建工具配置中發(fā)現(xiàn)的,并且也由 IntelliJ 編譯器運(yùn)行。請(qǐng)記?。篈PT 用于生成源代碼,根本不是用于替換現(xiàn)有類。Lombok 仍然能夠這樣做的唯一原因是因?yàn)樗麄兎浅I钊氲厍秩肓司幾g器,并且通過這種方式能夠在編譯下操作類的 AST。

由于這種方法在未來的 Java 版本中存在很大爭議并且容易出錯(cuò),因此任何人都極不可能嘗試構(gòu)建基于 APT 的類替換框架或能夠做到這一點(diǎn)的 Lombok 擴(kuò)展(我們不是這是因?yàn)?Lombok 是唯一可以被視為此類 APT 使用的“框架”的工具,而 Lombok 本身根本不是以可擴(kuò)展的方式構(gòu)建的)。

總之:APT 可能是可行的方法,但您的處理器必須創(chuàng)建一個(gè)新類,而不是嘗試修改現(xiàn)有類。

我不確定為什么您當(dāng)前的注釋處理器沒有與您的編譯器正確關(guān)聯(lián)。如果您使用的是 Maven,則可以嘗試在本地為您的處理器安裝工件,并將其作為編譯依賴項(xiàng)添加到您的其他項(xiàng)目中。

在 Java 中沒有修改編譯類的真正方法,所以如果你真的必須在同一個(gè)類中使用該方法,那么不幸的是,這意味著它無法完成。


查看完整回答
反對(duì) 回復(fù) 2023-04-26
?
小唯快跑啊

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊

您可以像 Lombok 一樣修改抽象語法樹 (AST),而不是實(shí)際創(chuàng)建文件并寫入文件。不建議這樣做,不同的編譯器以不同的方式實(shí)現(xiàn) AST,但您可以從 github ( https://github.com/rzwitserloot/lombok )擴(kuò)展 Lombok 源代碼,并在需要時(shí)制作注釋處理程序。但是,它有點(diǎn)難,因此請(qǐng)確保您確實(shí)需要它。


抱歉,我沒有正確閱讀您的問題。要注冊(cè)它,您需要在使用注釋和注釋處理器的項(xiàng)目中創(chuàng)建一個(gè) META-INF\services 目錄。在該目錄中,制作一個(gè)名為“javax.annotation.processing.Processor”的 txt 文件,其中包含處理器的名稱,例如 mypackage.SuggestProcessor。如果您決定使用 java 9,您還可以在 module-info 文件中聲明處理器。處理器的模塊必須包含“provides javax.annotation.processing.Processor with something.SuggestProcessor”,使用注釋的模塊必須包含“uses javax.annotation.processing.Processor”。這就是 javac 注冊(cè)注釋處理器的方式。


查看完整回答
反對(duì) 回復(fù) 2023-04-26
  • 2 回答
  • 0 關(guān)注
  • 139 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)