日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

使用精确的Java方法参数

發(fā)布時(shí)間:2023/12/3 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用精确的Java方法参数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

了解如何在Java應(yīng)用程序中選擇正確的方法參數(shù)類型并獲得更健壯和更短的代碼。

我們Java開發(fā)人員通常有一個(gè)使用方法參數(shù)的壞習(xí)慣,即不考慮實(shí)際需要什么,而只是選擇我們習(xí)慣的,可用的或首先想到的東西。 考慮以下代表性示例:

private static String poem(Map<Integer, String> numberToWord) {return new StringBuilder().append("There can be only ").append(numberToWord.get(1)).append(" of you.\n").append("Harts are better of when there are ").append(numberToWord.get(2)).append(" of them together.\n").append("These ").append(numberToWord.get(3)).append(" red roses are a symbol of my love to you.\n").toString();}

使用上面的方法時(shí),我們提供了一個(gè)將數(shù)字轉(zhuǎn)換為字符串的Map。 例如,我們可能提供以下地圖:

Map<Integer, String> englishMap = new HashMap<>();englishMap.put(1, "one");englishMap.put(2, "two");englishMap.put(3, "three");

當(dāng)我們用englishMap調(diào)用我們的詩歌方法時(shí),該方法將產(chǎn)生以下輸出:

There can be only one of you. Harts are better of when there are two of them together. These three red roses are a symbol of my love to you.

聽起來不錯(cuò)。 現(xiàn)在,假設(shè)您的重要人物是計(jì)算機(jī)迷,并且想為自己的詩增添趣味并給人留下深刻的印象,那么這就是要走的路:

Map<Integer, String> nerdMap = new HashMap<>();nerdMap.put(1, "1");nerdMap.put(2, "10");nerdMap.put(3, "11");

如果現(xiàn)在將nerdMap提交給poem方法,它將產(chǎn)生以下詩:

There can be only 1 of you. Harts are better of when there are 10 of them together. These 11 red roses are a symbol of my love to you.

與所有詩歌一樣,很難判斷哪首詩比另一首更浪漫,但我當(dāng)然有自己的看法。

問題所在

上面的解決方案有幾個(gè)問題:

首先,作為外部呼叫者,我們不能確定poem方法不會(huì)更改我們提供的Map。 畢竟,我們提供了一張地圖,沒有什么阻止接收者對地圖做任何可能的事情,甚至完全清除整個(gè)地圖。 當(dāng)然可以通過使用Collections.unmodifiableMap()方法包裝Map或提供現(xiàn)有地圖的副本來避免此副本,從而避免該副本。

其次,當(dāng)我們只需要將整數(shù)轉(zhuǎn)換為String的內(nèi)容時(shí),我們就不得不使用Map。 在某些情況下,這可能會(huì)創(chuàng)建不必要的代碼。 回想我們的nerdMap,可以使用Integer :: toBinaryString輕松計(jì)算地圖中的值,而無需手動(dòng)映射它們。

解決方案

我們應(yīng)該努力準(zhǔn)確地提供在任何給定情況下所需的內(nèi)容,而不是更多。 在我們的示例中,我們應(yīng)該修改poem方法以采用從整數(shù)到字符串的函數(shù)。 在調(diào)用方上如何實(shí)現(xiàn)此功能的重要性較低,它可以是映射或函數(shù),也可以是代碼或其他東西。 首先,這是應(yīng)該如何做:

private static String poem(IntFunction<String> numberToWord) {return new StringBuilder().append("There can be only ").append(numberToWord.apply(1)).append(" of you.\n").append("Harts are better of when there are ").append(numberToWord.apply(2)).append(" of them together.\n").append("These ").append(numberToWord.apply(3)).append(" red roses are a symbol of my love to you.\n").toString();}

如果我們想將poem方法與Map一起使用,則可以這樣簡單地調(diào)用它:

// Expose only the Map::get methodSystem.out.println(poem(englishMap::get));

如果我們想像書呆子詩一樣計(jì)算值,那么我們可以做得更簡單:

System.out.println(poem(Integer::toBinaryString));

哎呀,我們甚至可以為另一種患有雙重人格障礙的人寫一首詩:

System.out.println(poem(no -> englishMap.getOrDefault(no + 1, Integer.toString(no + 1))));

這將產(chǎn)生以下詩歌:

There can be only two of you. Harts are better of when there are three of them together. These 4 red roses are a symbol of my love to you.

注意您的方法參數(shù)!

翻譯自: https://www.javacodegeeks.com/2017/06/use-precise-java-method-parameters.html

總結(jié)

以上是生活随笔為你收集整理的使用精确的Java方法参数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。