string转object对象_025:听闻你精通面向对象,来解决一下

7c1914017cab8e8b9886eb0715c4133f.png

对象(含树),面向对象与函数式,是当今主流语言的共同特征

# 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方法,目前无法完成真实功能。

--

※ 我们的征途是星辰大海 ※

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值