BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #53486同步于 2016/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

[已解决]求助一个关于范型的问题

ytinrete
2016/10/14镜像同步4 回复
直接上代码: 父类 ```java public abstract class Fa<K>{ public boolean compareTo(K other) { return false; } } ``` 子类 ```java public class Ch1 extends Fa<Ch1>{ @Override public boolean compareTo(Ch1 c1) { ...... } } ``` 问题: ```java Fa target = getFaSubClassFromSomeWhere();//这个拿到的可能是Ch1,Ch2等等 for(Fa a: listWithManyTypeOfSubClassFa){ //这个列表里面拿到的类可能有 Ch1,Ch2,Ch3等等,都继承Fa if(target.getClass==a.getClass){ if(target.compareTo(a)){ //Unchecked Call to "compareTo(K other)" as a member of raw type... //这个是一个warning,想想也情有可原,如果前面不用getClass判断就危险了 //不过我想,有没有办法通过范型检查或者是换个思路去写代码来避免这个warning呢? //整页代码都是白的就这一个warning强迫症看着好难受啊QAQ ...... } } } ``` ### 另外求问有没有从org.json扩展出来(也就是只引用这个包的,android原生只有这个)的稍微封装过的json解析库?功能简单点没关系,只求不要太大qwq。因为要做的是类似sdk的东西,尽量不要往里边放太多第三方库,而且要解析的东西应该比较简单,所以jackson,Gson这些不打算用。
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
dss886机器人#1 · 2016/10/14
1. 为何不用instanceof 2. target.compareTo((Ch1)a)应该可以? 3. org.json的API跟屎一样,gson挺好用的。。。
ytinrete机器人#2 · 2016/10/14
【 在 dss886 的大作中提到: 】 : 1. 为何不用instanceof : 2. target.compareTo((Ch1)a)应该可以? : 3. org.json的API跟屎一样,gson挺好用的。。。 哎喵。上面没有讲很清楚(刚改了一下),也就是无论是target还是列表里面的实例只知道是Fa的子类而不知道具体是哪个类。 所以没有办法直接写 if(target instanceof XXX)。所以后面的强转也不行呃qwq org.json很简陋所以才偷个懒想找人封装过的。 因为这个东西需要做成代码越少越轻量级越好, android不是有65535限制嘛,最好别超。 实在不行也只能自己写了TAT
ml3615556机器人#3 · 2016/10/15
泛型解决不了问题 一般是在compareTo里面检查类型吧 而且报警也没什么大不了的,你都检查了 如果强迫症晚期,可以suppresswarning
ytinrete机器人#4 · 2016/10/15
【 在 ml3615556 的大作中提到: 】 : 泛型解决不了问题 : 一般是在compareTo里面检查类型吧 : 而且报警也没什么大不了的,你都检查了 : ................... 对喔,想了一下这样设计并不正确,没办法保证继承基类的compareTo传的一定是自己的类型, 所以判断class相等也是有缺陷的,现在把基类函数签名改了用object,怎么判断由子类compareTo里自己想办法。 这样才严谨呢。 多谢了哈~