string转object对象_025:听闻你精通面向对象,来解决一下
對象(含樹),面向對象與函數式,是當今主流語言的共同特征
# 025:聽聞你精通面向對象,來解決一下
#Quiz #Oop #Generic
計算機語言的進化之路走到2020年,面向對象與函數式乃是主流,每個語言模式的背后都是一套哲學與世界觀。面向對象和函數式中最具力量的特性是泛型Generic,因其具有嚴謹的數學上的類型推導,從而使編寫代碼變得智能,健壯,使類型設計變得有趣而燒腦。
@史榮久 / 2020-11-18 / CC-BY-SA-3.0??
## 1.經典問題
已知,蘋果是水果的子類。? 那么,裝水果的水果袋與裝蘋果的蘋果袋,
?蘋果袋是水果袋的子類么?
?水果袋能否裝蘋果么?
?要求用水果袋的地方,用蘋果袋行么?
?能用java泛型表示上述問題么?
## 2.綜合場景
有一個解析控制臺輸入參數的方法,按`空白`(`0x20`和`0x09`)分割命令行參數,支持`String`和`Number`(Long,Integer,Double,Float)兩種類型。當使用單雙引號(`'`和`"`)括起來時,其內的字符串僅作為`String`處理,也不考慮其內`空白`。
示意代碼如下。其意圖是,希望通過傳入參數的類型限定解析行為和輸出類型。若傳入`String`時,各參數都當做`String`處理,以`List`返回。若傳入Object時,能自動解析`Number`和`String`類型參數,以`List`返回。
@NotNullpublic static List parseArgs(CharSequence line, Classtype) { if (line == null || line.length() == 0) return Collections.emptyList(); List args = new ArrayList<>(); StringBuilder buff = new StringBuilder(); for (int i = 0, len = line.length(); i < len; i++) { // 分析`空白`分割的字符串,`引號`括起來的空白除外。 // 強制指定,引號括起來的字符串 typedAdd(args, buff, String.class); // 自動識別,解析成Number或String typedAdd(args, buff, Object.class); } if (buff.length() > 0) { typedAdd(args, buff, Object.class); } return args;}private static void typedAdd(List> list, StringBuilder buff, Class> type) { // 自動處理類型,并決定是否存入list中 buff.setLength(0);}@Testpublic void testParseArgs() { List<String> strs = parseArgs("123 456", String.class); Assert.assertEquals(Arrays.asList("123", "456"), strs); List<Object> objs = parseArgs("123 '456'", Object.class); Assert.assertEquals(Arrays.asList(123, "456"), objs); // 如果以CLass為參數,無法限定值, // 可以使用Number.class, int[].class // 無法控制程序行為和輸出}■ 希望行為,優雅的利用面向對象和泛型知識
?限定參數`type`的輸入值,類似enum類特性,僅可輸入2個固定值,`Obj`和`Str`
?當輸入`Str`時,返回`List`,當`Obj`時,返回`List`
?typedAdd方法支持泛型,不需要類型強轉和SuppressWarnings
■ 核心思想,限制的藝術,把運行時錯誤消滅在編譯時。
?限定參數值,達到enum那種效果。
?通過參數值,限定return類型。
■ 動手提示,
?改造參數`Class type`,當前無法約束參數值。
?改造 typedAdd方法,目前無法完成真實功能。
--
※ 我們的征途是星辰大海 ※
總結
以上是生活随笔為你收集整理的string转object对象_025:听闻你精通面向对象,来解决一下的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mips汇编计算开方_清华考研辅导班-2
- 下一篇: npm install是什么命令_了解n