
最近做个项目,记录一个督办事项的变更、反馈等信息,按时间排序。变更、反馈属于两种类型,所以只能分两张表存放。然后方案是做了个主表,记录变更或反馈的时间,然后每个主表的记录对应一个变更或一个反馈。现在做到返回值这里了,想用一个类型的对象接收变更或反馈记录。这里认为变更是一种类型,反馈是一种类型,想再定义一种类型继承他们的所有属性。何解?或者有别的思路?
1 sutra Sep 3, 2019 interface |
2 ebony0319 Sep 3, 2019 via Android 可以用静态内部类 |
3 lhx2008 Sep 3, 2019 没意义,本来就是两个玩意。把公共部分抽一个父类就行了。要不然就不要这样设计数据库表。 |
4 kaiyiliu123 OP @sutra 那个只能常量吧,我这里要用变量 |
5 kaiyiliu123 OP @ebony0319 具体怎么做?我刚才试了下没想到怎么做,还望指教 |
6 kaiyiliu123 OP @lhx2008 那如果两种类型混合排序有什么简洁的方法吗? |
7 ebony0319 Sep 3, 2019 via Android |
8 yidinghe Sep 3, 2019 via Android 你要创建一个新的类,既属于变更又属于反馈,这样的类是做什么用的? |
9 kaiyiliu123 OP @yidinghe 用于接收数据库数据,然后可能还会按分类转换类型,想先把数据接收到再说 |
10 yidinghe Sep 3, 2019 via Android 建议参考 github 的 issue 是如何管理的,你可以从时间线上看到所有对于该 issue 的评论和操作,二者展示方式有所不同 |
11 tramm Sep 3, 2019 把返回值赋值给变更&反馈的父类不就好了,然后判断到底是变更还是反馈. 不知道我的理解跟你说的是不是一个意思:D |
12 sutra Sep 3, 2019 说的是这个意思吗: ``` public class Main3 { static interface Post { String getId(); } static class Change implements Post { @Override public String getId() { return "change-id"; } } static class Feedback implements Post { @Override public String getId() { return "feedback-id"; } } static class PostService { <T extends Post> T savePost(T t) { return t; } } public static void main(String[] args) { Change change = new Change(); System.out.println(new PostService().savePost(change).getId()); Feedback feedback = new Feedback(); System.out.println(new PostService().savePost(feedback).getId()); } } ``` |
13 ys1992 Sep 3, 2019 via Android Java 是没有多继承的,多实现可以的!建议好好考虑一下业务场景,这里按照楼主的描述应该是变更和反馈业务类型不同但是流程一致,考虑复用性(偷懒 手动狗头),可以考虑定义抽象类或者定义接口类提供不同子实现 |
14 ys1992 Sep 3, 2019 via Android 具体业务参数带上变更或者反馈类型方便后续业务处理 |
15 pink123 Sep 3, 2019 @kaiyiliu123 楼主多去 Stack Overflow 去提问,这里不是提问的好地方,关于这个问题可以访问这里 https://stackoverflow.com/questions/21824402/java-multiple-inheritance |
16 merpyzf Sep 4, 2019 via iPhone 如果我来做的话我可能会再去定义一个包含两个类型的类。然后读取和写入的时候都进行一次转换就可以了。这个包含两个类型的类实际上就可以算作是 viewmodel,然后那个单独的类就是和数据表相对应的 entity。 |
17 aguesuka Sep 4, 2019 1.Java 如何多继承呢?使用 interface,定义 default 方法. 按照我的理解,你是数据库里有三张表 ;主表主要有三个字段[类型,变更 /反馈主键,时间],然后你想把两张表查出来的数据放一个 List 里面去,因为你说了混合排序;如果我没理解错误的话,你的解决方案应该是[变更 /反馈]同时实现一个公共接口来作为 List 的泛型,里面的对象还是原来的对象,子类没有的字段就 return null; 不管是怎样,排序都可以 list.sort(Comparator.comparing(this::getTimeFromBean));来做. 我在山东做过一个督导考核的项目,听着这需求有点像我同事... |
18 leon0318 Sep 4, 2019 via Android 内部类 |
19 jzq526 Sep 4, 2019 java 故意设计成了不支持多重继承,所以实现不了。但可以设计一个新的父类,包含你需要的所有内容。或者实现多个接口 |
20 rwecho Sep 4, 2019 首先考虑组合 少用继承 |
21 zifangsky Sep 4, 2019 感觉你的数据库设计不太合理,要么就设计一个表,专门用一个字段标识是“变更”类型还是“反馈”类型,要么就设计成两个基本没有联系的表(只是都有一个共同字段关联“督办事项”的 ID )。这样设计不就好做了吗? |
22 kaiyiliu123 OP @zifangsky 注意审题哈,这是两种类型,比如变更表,可能有变更内容,变更说明,单据状态三个字段;反馈可能有反馈内容,反馈说明两个字段。这种怎么放在一个表里呢?不同类型还是分表放比较好吧? |
23 zifangsky Sep 4, 2019 @kaiyiliu123 #22 我不是都已经说了吗?两种类型区别不大就放在一个表,区别大就放在两个表。设计成两个表,大不了最后再设计一个类包含前面的两种类型(这属于组合方式而不是多继承),然后查 SQL 返回这个大类就可以了。 |
24 no1xsyzy Sep 4, 2019 struct{typebyte, union{}} 这种做法呢? 把两个封装进去,然后另一成员变量描述是哪种呗 |
25 VKRUSSIA Dec 3, 2021 只能合了 |