亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Guava的注解處理機(jī)制全面講解

 更新時(shí)間:2023年12月13日 08:34:38   作者:S  
這篇文章主要為大家介紹了Guava的注解處理機(jī)制全面講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

Guava不僅僅是一個(gè)工具庫,它更像是Java程序員的瑞士軍刀,提供了一系列強(qiáng)大的功能,從集合操作到函數(shù)式編程,再到今天咱們要深入探討的——注解處理機(jī)制。

注解(Annotations),在Java世界里,它們就像是給代碼加的小便簽,既能標(biāo)記信息,又能影響程序的運(yùn)行。Guava對注解處理的方式,不僅獨(dú)具匠心,而且用起來也特別順手。今天,小黑就要帶大家一探究竟,看看Guava是怎樣把注解玩得風(fēng)生水起的!

注解的基礎(chǔ)

在深入Guava的神奇之前,咱們先來搞清楚,到底什么是注解。在Java中,注解就像是給代碼加標(biāo)簽一樣的東西。想象一下,你在一大堆書里放了個(gè)書簽,一眼就能找到那本書。注解也是這個(gè)道理,它們幫助程序員在一大堆代碼中快速找到關(guān)鍵部分,同時(shí)還能告訴JVM或者其他工具,這段代碼有什么特別之處。

舉個(gè)例子,咱們經(jīng)常用的@Override注解,就是告訴JVM,這個(gè)方法是重寫父類的方法。如果父類中沒有這個(gè)方法,JVM就會報(bào)錯(cuò),這樣一來,就避免了因拼寫錯(cuò)誤或方法簽名不對而引發(fā)的問題。

再比如,Spring框架里的@Autowired注解,它告訴Spring,嘿,這里需要你來注入一個(gè)對象。這樣的話,Spring就會自動幫咱們管理這些對象的生命周期和依賴關(guān)系。

好了,注解的基礎(chǔ)知識就是這樣。它們雖然小,但作用可大了。注解讓咱們的代碼更簡潔、更易于理解,同時(shí)還能增強(qiáng)程序的功能。

Guava注解的特點(diǎn)

好啦,既然咱們已經(jīng)了解了注解的基礎(chǔ),現(xiàn)在小黑要帶大家看看Guava在這塊兒是如何大放異彩的。Guava的注解處理,不僅僅是對Java原生注解的一個(gè)補(bǔ)充,它更像是在注解這塊地盤上開辟了一個(gè)全新的領(lǐng)域。

首先,咱們得明白,Guava的注解處理主要是圍繞兩個(gè)方面展開的:提高代碼的可讀性和提高程序的運(yùn)行效率。Guava通過提供一些特別的注解,讓咱們的代碼更加簡潔明了,同時(shí)也讓程序在運(yùn)行時(shí)更加高效。

舉個(gè)例子:

在Java中,處理空值總是一個(gè)頭疼的問題。咱們經(jīng)常需要寫一堆if語句來檢查變量是否為null。但在Guava中,有一個(gè)叫@Nullable的注解,可以幫咱們優(yōu)雅地處理這個(gè)問題。當(dāng)你在一個(gè)字段、方法或參數(shù)上使用了@Nullable注解,它就表示這個(gè)東西可能是null,這樣就提醒其他程序員在使用時(shí)要小心處理空值。

看看下面這段代碼:

import javax.annotation.Nullable;
public class UserInfo {
    private final String name;
    private final String email;
    public UserInfo(String name, @Nullable String email) {
        this.name = name;
        this.email = email;
    }
    // 省略其他代碼
}

在這個(gè)例子中,email字段可能是null。因?yàn)樗?code>@Nullable注解標(biāo)記了,所以在使用email的時(shí)候,咱們會更加注意它可能為空的情況。

但這還不是全部,Guava還提供了一些其他的注解,比如@VisibleForTesting。這個(gè)注解告訴咱們,某個(gè)方法或字段主要是為了測試目的而公開的。這樣的話,在看代碼的時(shí)候,咱們就能一眼看出,哦,這個(gè)方法或字段是給測試用的,平時(shí)可能不會用到。

再來個(gè)例子:

public class DataProcessor {
    @VisibleForTesting
    void processInternalData(String data) {
        // 處理數(shù)據(jù)的代碼
    }
    public void processData(String data) {
        // 公開的處理數(shù)據(jù)方法
        processInternalData(data);
    }
}

在這個(gè)例子里,processInternalData方法被@VisibleForTesting注解標(biāo)記。這意味著這個(gè)方法主要是為了測試而存在的,盡管它是package-private的。

Guava的注解處理機(jī)制不僅讓代碼更加清晰,還能提高程序的運(yùn)行效率。通過這些小巧精致的注解,咱們可以寫出既美觀又實(shí)用的Java代碼。

Guava注解處理機(jī)制的內(nèi)部工作原理

咱們已經(jīng)看到了Guava注解的一些炫酷應(yīng)用,那么現(xiàn)在,小黑要帶大家深入挖掘一下,Guava是如何在底層處理這些注解的。畢竟,了解了原理,咱們才能更好地利用這些工具。

Guava的注解處理,核心在于它如何解釋和運(yùn)用這些注解來影響代碼的行為。不像某些注解僅僅起到標(biāo)記作用,Guava的注解常常與代碼邏輯緊密相關(guān),它們能夠觸發(fā)特定的行為或改變方法的執(zhí)行方式。

@Nullable注解的內(nèi)部處理:

在Guava中,@Nullable注解是一種標(biāo)記,用來指示某個(gè)字段、方法返回值或參數(shù)可能為null。但這個(gè)注解本身不會改變代碼的行為,它更多的是一種標(biāo)記,用于提醒開發(fā)者在使用時(shí)需要注意空值處理。這是一個(gè)在編碼階段提供幫助的工具,而非運(yùn)行時(shí)改變行為的機(jī)制。

再來看看另一個(gè)注解@VisibleForTesting。這個(gè)注解告訴開發(fā)者,某個(gè)方法或字段主要是為了測試而公開。雖然它本身不會影響方法或字段的功能,但它在代碼審查和維護(hù)階段非常有用。它可以提示維護(hù)者,這部分代碼可能只在測試環(huán)境下使用,或者其可見性是為了方便測試。

那么Guava如何處理這些注解呢?

Guava主要通過編譯時(shí)的注解處理器來實(shí)現(xiàn)。當(dāng)你的代碼被編譯時(shí),Guava的注解處理器會運(yùn)行,檢查源代碼中的注解,并據(jù)此生成額外的代碼或進(jìn)行編譯時(shí)檢查。這種機(jī)制使得注解不僅僅是代碼中的標(biāo)記,它們可以實(shí)際上影響編譯過程,從而提供更強(qiáng)大的功能。

舉個(gè)具體的例子,假設(shè)你在代碼中使用了@VisibleForTesting注解。Guava的注解處理器在編譯時(shí)會檢查這個(gè)注解,并可以生成一些警告或錯(cuò)誤,如果發(fā)現(xiàn)這個(gè)被注解的元素在非測試代碼中被錯(cuò)誤地使用了。

這樣的處理方式,讓Guava的注解不僅僅是文檔上的標(biāo)記,它們真正地融入到了代碼的編寫和編譯過程中。通過這種方式,Guava的注解增強(qiáng)了代碼的表達(dá)力,同時(shí)也提高了代碼的安全性和健壯性。

Guava注解與Java標(biāo)準(zhǔn)注解的比較

咱們知道,Java自身就提供了一套注解系統(tǒng),那Guava為什么還要搞一套自己的呢?其實(shí),這兩者在用途和功能上有著明顯的差異。

首先,Java自帶的注解,像@Override、@Deprecated這些,主要是起到標(biāo)記的作用。它們告訴編譯器和其他程序員,這段代碼有特殊的意義。比如,@Override就是告訴編譯器:“小黑這里重寫了一個(gè)父類的方法,你得檢查一下,確保這個(gè)方法確實(shí)存在于父類中。”

但Guava的注解,就更加實(shí)用一些。它們不僅僅是標(biāo)記,還經(jīng)常與代碼的實(shí)際行為相關(guān)聯(lián)。例如,@VisibleForTesting這個(gè)注解,它告訴其他程序員:“這個(gè)方法或變量主要是為了測試而存在的。”這樣的信息在代碼維護(hù)時(shí)非常有用,因?yàn)樗峁┝岁P(guān)于代碼為什么這樣寫的背景信息。

來看個(gè)例子對比一下:

// Java標(biāo)準(zhǔn)注解
@Override
public String toString() {
    return "Standard Java annotation used here";
}
// Guava注解
@VisibleForTesting
void secretMethod() {
    // 這個(gè)方法主要是為了測試而存在
}

在第一個(gè)例子中,@Override是Java的標(biāo)準(zhǔn)注解,它告訴編譯器這個(gè)toString()方法是重寫了父類的方法。而在第二個(gè)例子中,@VisibleForTesting是Guava的注解,它提供了更多關(guān)于方法用途的信息,這對于代碼的讀者來說是非常有價(jià)值的。

此外,Guava的注解還經(jīng)常用于改善代碼的設(shè)計(jì)和提高代碼的質(zhì)量。比如,Guava的@Beta注解,它表示這個(gè)API還在測試階段,可能會有變動,這樣程序員在使用時(shí)就會更加小心。

Guava的注解與Java的標(biāo)準(zhǔn)注解相比,更注重實(shí)用性和代碼的自我說明性。它們不僅僅是一些標(biāo)記,而是真正融入到代碼中,幫助提高代碼的質(zhì)量和可維護(hù)性。這就是Guava注解和Java標(biāo)準(zhǔn)注解的主要區(qū)別。了解了這些,咱們在選擇使用哪種注解時(shí),就可以更有依據(jù)了。 Guava的注解真的是一把強(qiáng)大的工具,在正確的場合使用它們,會讓咱們的代碼更上一層樓!

Guava提供的注解及其作用

Guava提供了一系列的注解,每個(gè)都有其獨(dú)特的用途和功能。咱們逐一來看看它們都是些什么,并且探討一下它們各自的作用。

1. @Beta

  • 作用:標(biāo)記一個(gè)API為實(shí)驗(yàn)性的或者尚未穩(wěn)定。它告訴使用者這個(gè)API在未來版本中可能會有變化。
  • 應(yīng)用場景:在你的庫或應(yīng)用程序中標(biāo)記那些可能會更改的API。

2. @VisibleForTesting

  • 作用:指示一個(gè)方法、字段或類是因?yàn)闇y試的需要而更廣泛地可見。
  • 應(yīng)用場景:提高代碼的可測試性,同時(shí)保持代碼封裝性。

3. @GwtCompatible

  • 作用:標(biāo)記那些可以與Google Web Toolkit(GWT)兼容的類或方法。
  • 應(yīng)用場景:用于創(chuàng)建同時(shí)支持Java和GWT的應(yīng)用程序。

4. @GwtIncompatible

  • 作用:與@GwtCompatible相反,這個(gè)注解用來標(biāo)記不兼容GWT的代碼。
  • 應(yīng)用場景:明確指出某些代碼不能在GWT環(huán)境中使用。

5. @Nullable

  • 作用:標(biāo)記字段、方法返回值或參數(shù)可以為null。
  • 應(yīng)用場景:提醒開發(fā)者在使用相關(guān)變量時(shí)要進(jìn)行空值檢查。

6. @Immutable

  • 作用:標(biāo)記一個(gè)類的實(shí)例是不可變的。
  • 應(yīng)用場景:用于創(chuàng)建線程安全且不可變的對象。

7. @Throwables

  • 作用:一組用于異常處理的工具類,雖然不是注解,但在處理異常時(shí)非常有用。
  • 應(yīng)用場景:用于簡化異常處理和傳播。

8. @Preconditions

  • 作用:同樣不是注解,但提供了一系列靜態(tài)方法用于進(jìn)行方法參數(shù)的快速檢查。
  • 應(yīng)用場景:用于方法開始時(shí)檢查參數(shù)的有效性。

確實(shí),Guava除了我之前提到的那些注解外,還有一些其他的注解,它們也在特定場景下發(fā)揮著重要作用。讓小黑再給咱們介紹一些其他的Guava注解:

9. @CanIgnoreReturnValue

  • 作用:表示調(diào)用者可以忽略方法的返回值。
  • 應(yīng)用場景:用于那些執(zhí)行某些操作但返回值通常不關(guān)鍵的方法,例如某些void替代方法。

10. @CheckReturnValue

  • 作用:表示應(yīng)該注意到并處理方法的返回值。
  • 應(yīng)用場景:用于那些方法的返回值包含重要信息或狀態(tài),例如校驗(yàn)或轉(zhuǎn)換操作的結(jié)果。

11. @ElementTypesAreNonnullByDefault

  • 作用:表示在特定范圍內(nèi)的所有元素(如方法參數(shù)、返回值)默認(rèn)不為null。
  • 應(yīng)用場景:用于模塊或包級別,減少顯式地使用@Nonnull注解。

12. @TypeParameter

  • 作用:用于注解泛型類型參數(shù),說明其特定的屬性或約束。
  • 應(yīng)用場景:在創(chuàng)建泛型類或方法時(shí),提供更多類型信息。

13. @DoNotMock

  • 作用:表示不應(yīng)該對此類或接口創(chuàng)建模擬實(shí)現(xiàn)。
  • 應(yīng)用場景:用于標(biāo)記那些不適合被模擬的類或接口,通常是因?yàn)樗鼈冇袕?fù)雜的行為或外部依賴。

14. @GoogleInternal

  • 作用:表示該接口或類是Google內(nèi)部使用的。
  • 應(yīng)用場景:用于Google內(nèi)部項(xiàng)目,不適用于外部開發(fā)者。

最佳實(shí)踐和性能考慮

咱們已經(jīng)一起探索了Guava注解的世界,現(xiàn)在小黑想跟大家談?wù)勅绾卧趯?shí)際中最好地使用這些注解,以及在使用它們時(shí)需要考慮的性能問題。

首先,使用注解最重要的一點(diǎn)就是明確其目的。每個(gè)注解都有其特定的用途,因此,在使用前,一定要清楚地了解它們各自的作用。比如,@Nullable用于標(biāo)記可能為null的字段或參數(shù),@VisibleForTesting用于標(biāo)記那些主要為了測試而設(shè)計(jì)的代碼部分。正確地使用注解可以提高代碼的可讀性和維護(hù)性。

最佳實(shí)踐

  • 明確注解的意圖:在使用任何注解之前,都應(yīng)該清楚地了解其意圖和用途。不恰當(dāng)?shù)氖褂米⒔鈺?dǎo)致混淆,甚至可能引起錯(cuò)誤。
  • 合理使用@Nullable:這個(gè)注解非常有用,但過度使用會導(dǎo)致代碼中充滿空值檢查,從而降低代碼質(zhì)量。在可能的情況下,盡量避免返回null,使用Java 8的Optional類作為更好的替代。
  • 優(yōu)先使用不可變對象:使用@Immutable標(biāo)記的類可以提高代碼的線程安全性。在多線程環(huán)境中,這是一個(gè)非常好的實(shí)踐。
  • 利用@VisibleForTesting提高測試質(zhì)量:這個(gè)注解可以幫助你識別哪些部分的代碼是為了測試而存在的,有助于寫出更可靠的測試。

性能考慮

注解雖好,但也不是沒有代價(jià)的。使用注解可能會對性能產(chǎn)生一定影響,尤其是在運(yùn)行時(shí)通過反射來處理注解的情況。

  • 編譯時(shí)處理:盡量利用編譯時(shí)注解處理器,而不是在運(yùn)行時(shí)通過反射處理注解。編譯時(shí)處理可以在代碼編譯階段就發(fā)現(xiàn)問題,而不是在運(yùn)行時(shí)。
  • 避免過度使用反射:雖然反射提供了強(qiáng)大的能力來處理注解,但它也是一把雙刃劍。過度使用反射可能會導(dǎo)致性能問題,尤其是在高性能要求的應(yīng)用中。
  • 注解與性能權(quán)衡:在決定使用注解的時(shí)候,要考慮它們帶來的便利性與潛在的性能影響之間的權(quán)衡。有時(shí)候,為了獲得更好的性能,可能需要犧牲一些代碼的簡潔性。

通過這些最佳實(shí)踐和性能考慮,咱們可以更加有效地利用Guava的注解,寫出既清晰又高效的代碼。記住,注解是一個(gè)強(qiáng)大的工具,但像所有工具一樣,合理使用是關(guān)鍵。使用Guava的注解時(shí),總是要考慮它們在你的應(yīng)用中的實(shí)際效果。這樣,咱們就能在提高代碼質(zhì)量的同時(shí),確保應(yīng)用的性能不受影響。

常見問題與解決方案

問題1:過度使用@Nullable

  • 問題描述:有時(shí)候,咱們可能會發(fā)現(xiàn)自己在幾乎每個(gè)字段和方法參數(shù)上都使用了@Nullable。這可能導(dǎo)致代碼充斥著空值檢查,降低代碼的可讀性和可維護(hù)性。
  • 解決方案:盡量避免返回null值。可以使用Java 8的Optional類,它提供了一種更好的方式來表達(dá)可選值。如果一個(gè)方法返回Optional<T>而不是Tnull,這意味著返回值可以不存在。

問題2:濫用@VisibleForTesting

  • 問題描述@VisibleForTesting很有用,但如果濫用,可能導(dǎo)致本應(yīng)私有的方法或字段被錯(cuò)誤地暴露。
  • 解決方案:僅在必要時(shí)使用@VisibleForTesting。在測試代碼中,盡量通過其他方式測試私有方法,例如測試公開方法的行為。

問題3:性能問題由于反射處理注解

  • 問題描述:在運(yùn)行時(shí)使用反射來處理注解可能會帶來性能問題,尤其是在高性能要求的應(yīng)用中。
  • 解決方案:盡可能在編譯時(shí)處理注解。如果必須在運(yùn)行時(shí)處理注解,確保這種處理是高效的,比如緩存處理結(jié)果,避免重復(fù)處理。

問題4:誤解注解的意圖

  • 問題描述:有時(shí)候,開發(fā)者可能會誤解或不完全理解某個(gè)注解的真正意圖,從而錯(cuò)誤地使用它們。
  • 解決方案:在使用任何注解之前,仔細(xì)閱讀文檔,了解其詳細(xì)用途。如果可能,進(jìn)行代碼審查,確保注解的使用是恰當(dāng)?shù)摹?/li>

示例代碼:使用Optional

import java.util.Optional;
public class UserInfo {
    private final String name;
    private final Optional<String> email;
    public UserInfo(String name, Optional<String> email) {
        this.name = name;
        this.email = email;
    }
    // 獲取電子郵件,如果不存在則返回Optional.empty()
    public Optional<String> getEmail() {
        return email;
    }
    // 省略其他代碼
}

在這個(gè)例子中,email字段使用Optional<String>而不是String。這樣做的好處是,它明確地告訴代碼的使用者,email可能不存在,并且提供了一種優(yōu)雅的處理可選值的方式。

通過這些常見問題的討論和解決方案,咱們可以更有效地利用Guava的注解,避免常見的陷阱。記住,最好的學(xué)習(xí)方法是通過實(shí)踐,遇到問題時(shí)不要害怕,尋找解決方案是提升技能的好機(jī)會。

總結(jié)

Guava的注解功能不僅豐富了Java的注解體系,也為編程實(shí)踐提供了更多的便利性和靈活性。通過這些注解,咱們可以寫出更清晰、更健壯、更易于維護(hù)的代碼。

使用Guava注解的關(guān)鍵在于理解它們各自的用途和適用場景。從@Nullable@VisibleForTesting,每個(gè)注解都有其獨(dú)特的用途。恰當(dāng)?shù)厥褂眠@些注解能夠幫助咱們避免常見的編程錯(cuò)誤,提升代碼的可讀性,并有助于團(tuán)隊(duì)成員之間更有效地溝通代碼意圖。

但是,像所有工具一樣,注解也應(yīng)該謹(jǐn)慎使用。濫用注解可能會導(dǎo)致代碼混亂,降低代碼質(zhì)量。特別是在性能敏感的應(yīng)用中,過度依賴運(yùn)行時(shí)處理的注解可能會成為性能瓶頸。

記住,編程不僅僅是關(guān)于寫代碼,更是關(guān)于寫出好代碼——易于理解、維護(hù)和擴(kuò)展的代碼。Guava的注解正是這樣一種工具,它能幫助咱們實(shí)現(xiàn)這些目標(biāo)。

最后,咱們要記住,學(xué)習(xí)和使用新工具是一個(gè)持續(xù)的過程。不斷實(shí)踐、遇到問題、尋找解決方案,這樣才能真正掌握Guava注解的精髓。希望這次的分享能幫助大家在Java編程的路上更進(jìn)一步!

以上就是Guava的注解處理機(jī)制的詳細(xì)內(nèi)容,更多關(guān)于Guava的注解處理機(jī)制的資料請關(guān)注腳本之家其它相關(guān)文章!

以上就是Guava的注解處理機(jī)制全面講解的詳細(xì)內(nèi)容,更多關(guān)于Guava注解處理機(jī)制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java基礎(chǔ)的詳細(xì)了解第二天

    java基礎(chǔ)的詳細(xì)了解第二天

    這篇文章對Java編程語言的基礎(chǔ)知識作了一個(gè)較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來幫助
    2021-08-08
  • SpringBoot+Redis哨兵模式的實(shí)現(xiàn)

    SpringBoot+Redis哨兵模式的實(shí)現(xiàn)

    本文主要介紹了SpringBoot+Redis哨兵模式的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 如何在Java中使用標(biāo)準(zhǔn)庫創(chuàng)建臨時(shí)文件

    如何在Java中使用標(biāo)準(zhǔn)庫創(chuàng)建臨時(shí)文件

    有時(shí)候我們程序運(yùn)行時(shí)需要產(chǎn)生中間文件,但是這些文件只是臨時(shí)用途,并不做長久保存,我們可以使用臨時(shí)文件,不需要長久保存,這篇文章主要給大家介紹了關(guān)于如何在Java中使用標(biāo)準(zhǔn)庫創(chuàng)建臨時(shí)文件的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Spring Bean的初始化和銷毀實(shí)例詳解

    Spring Bean的初始化和銷毀實(shí)例詳解

    這篇文章主要介紹了Spring Bean的初始化和銷毀,結(jié)合實(shí)例形式詳細(xì)分析了Spring Bean的初始化和銷毀相關(guān)配置、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2019-11-11
  • springboot亂碼問題解決方案

    springboot亂碼問題解決方案

    這篇文章主要介紹了springboot亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java開發(fā)中synchronized的定義及用法詳解

    Java開發(fā)中synchronized的定義及用法詳解

    這篇文章主要介紹了Java開發(fā)中synchronized的定義及用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • springBoot2.6.2自動裝配之注解源碼解析

    springBoot2.6.2自動裝配之注解源碼解析

    對于springboot個(gè)人認(rèn)為它就是整合了各種組件,然后提供對應(yīng)的自動裝配和啟動器(starter),基于這個(gè)流程去實(shí)現(xiàn)一個(gè)定義的裝配組件,下面這篇文章主要給大家介紹了關(guān)于springBoot2.6.2自動裝配之注解源碼解析的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 如何使用SpringMVC的消息轉(zhuǎn)換器設(shè)置日期格式

    如何使用SpringMVC的消息轉(zhuǎn)換器設(shè)置日期格式

    這篇文章主要介紹了如何使用SpringMVC的消息轉(zhuǎn)換器設(shè)置日期格式問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 淺析final,finally,finalize 的區(qū)別

    淺析final,finally,finalize 的區(qū)別

    以下是對final,finally,finalize的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過來參考下
    2013-09-09
  • 解決因jdk版本引起的TypeNotPresentExceptionProxy異常

    解決因jdk版本引起的TypeNotPresentExceptionProxy異常

    這篇文章介紹了解決因jdk版本引起的TypeNotPresentExceptionProxy異常的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12

最新評論