Java謎題7:餅乾-解決方案
乍一看,cookiemonster.eat需要返回一個負長度的String。仔細看,有兩個單獨的要求:第一次呼叫eat時,它需要返回一個空String;第二次,它需要返回一個負值length()。
訣竅是,泛型方法的返回型別可能會有所不同,具體取決於使用它的型別上下文。為了證明這一點,讓我們來看一個示例java.util.Collections:<T> List <T> emptyList()。在方法簽名中,<t>表示方法上有型別變數t,list<t>是返回型別。您可以將其用作List<String> strings = Collections.emptyList();。這是因為型別推斷確保返回型別(list<t>)中的t調整為它被分配給的變數型別(list<string>)。如果沒有上下文(未分配任何內容),則推斷的型別將是 Object(T的隱式上界)。在Collections.emptyList().size()中,例如emptyList()返回一個List<Object>。
回到我們的CookieMonster,我們可以讓eat返回上下文期望它返回的任何內容:static<c>ceat(string cookie)。就像一塊神奇的餅乾。如果你認為是“巧克力”並把它放進嘴裡,那它就是巧克力餅乾。在count中,它被分配給一個String,它會變成一個Stringcookie(我不想知道那是什麼味道)。這是一個開始,但是在cookiemonster.eat(nocookie).length()中,沒有上下文,所以它變成了沒有length()方法的Object ,並且無法編譯。
我們透過在C上設定一個bound來修復這個問題。要編譯兩個eat呼叫,bound必須是String的超類,並且有一個length()方法。有一種型別:charsequence。因此,我們將型別變數<c>替換為<c extends charsequence>。在第一次呼叫中,eat(“cookie”)必須返回空值String,在第二次呼叫中,eat(“”)必須返回長度為負的charsequence:
package monster; public class CookieMonster { public static <C extends CharSequence> C eat(String cookie) { return (C) (cookie.length() > 0 ? "" : new CharSequence() { public int length() { return -1; } public char charAt(int index) { throw new UnsupportedOperationException(); } public CharSequence subSequence(int start, int end) { throw new UnsupportedOperationException(); } }); } } |
相關文章
- Java 謎題 7:餅乾(Cookie)JavaCookie
- Java謎題1:小丑 - 解決方案Java
- Java謎題5:球(ball)-解決方案Java
- Java謎題3:汽車 - 解決方案Java
- Java謎題6:雞與蛋-解決方案Java
- Google 面試題 | 分餅乾Go面試題
- 乾貨:基於scss的主題配色解決方案CSS
- 【LeetCode】455. Assign Cookies 分發餅乾(Medium)(JAVA)每日一題LeetCodeCookieJava每日一題
- nginx /Java 解決跨域問題方案NginxJava跨域
- Leetcode_455_分發餅乾_水題LeetCode
- 平方謎題(7)
- Java解決 PTA L2-003 月餅 (25分) 超時問題Java
- Java™ 教程(常見問題及其解決方案)Java
- 乘法◆除法◆謎題(7)
- ●六數謎題●(7)
- Java謎題:小丑Java
- 免費餡餅 題解
- ◆Π謎宮2019◆(8月7日附加謎題)
- ◆Π謎宮2019◆(7月31日附加謎題)
- ◆Π謎宮2019◆(7月28日附加謎題)
- Java 呼叫 Go 解決方案JavaGo
- Java 8 的日期與時間問題解決方案Java
- 工作中碰到的Java問題整理及解決方案Java
- Java限流及常用解決方案Java
- 跨域問題,解決方案 – CORS方案跨域CORS
- LeetCode455.分發餅乾LeetCode
- 力扣455 分發餅乾力扣
- 在 Linux 命令列中使用 nudoku 解決謎題Linux命令列
- 乾貨:blob匯出檔案亂碼解決方案
- Java謎題5:球(ball)Java
- Java 謎題 2:夢境Java
- Java謎題3:汽車Java
- 1~7的謎題(1):n=1
- Java 之 Map 的鍵,值多重排序問題解決方案Java排序
- 7 種方案解決移動端1px邊框的問題
- java.lang.OutOfMemoryError及解決方案JavaError
- Java定時任務解決方案Java
- 解謎遊戲謎題設計研究(三):推理類謎題設計遊戲