作者Killercat (杀人猫™)
看板java
标题[问题] Java用父类别内容产生子类别
时间Fri Feb 13 15:13:22 2015
我这边有一个比较特别的需求,想请教一下大家目前的java能不能做到
class A {
int a1;
int a2;
}
class B extends A {
int b1;
int b2;
}
我们现在有一个A的实体a
A a = getA();
然後我希望用这个实体去initialize出一个B
B b = new B(a); <==当然不会过
我有试过在B里面用super试图去initialize :
B(A a) {
super(a); <==除非A有copy constructor 不然也不会过
}
请问有没有比较好的方法能够new一个B 里面关於A的部分通通用一个A的
实体去initialize呢?
基本上我不太愿意用土炮的方法比方说
B(A a) {
this.a1 = a.a1;
this.a2 = a.a2;
}
当然,用reflect去扫出所有的A的field再设值给B也是可以
比方说我刚写好的
https://gist.github.com/Rayer/6c7547057adb99c74583
只是我在想有没有更好的方法 感谢大家
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 59.124.251.135
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1423811604.A.F3A.html
※ 编辑: Killercat (59.124.251.135), 02/13/2015 15:14:35
※ 编辑: Killercat (59.124.251.135), 02/13/2015 15:42:23
1F:推 popcorny: 建议用土炮作法,keep it simple and stupid 02/13 17:34
2F:→ realmeat: clonable 02/13 17:40
3F:→ Killercat: pop:土炮问题在於说这bean很多,我不太想一个个稿orz 02/13 17:55
4F:→ Killercat: @realmeat:cloneable仅只是保证你有做出clone() 02/13 17:55
5F:→ Killercat: 可以安全地clone而已 并不会帮你这样clone orz 02/13 17:55
6F:→ Killercat: 诶等等 cloneable我误会了 也许是个不错的做法.... 02/13 17:59
7F:→ popcorny: clonable是产生同型态的instance吧 02/13 18:01
9F:→ popcorny: 但是前提是A的fields都要包getter 02/13 18:06
10F:→ Killercat: getter...这又是另外一个痛点了orz 02/13 18:47
11F:→ Killercat: 不过谢谢上面两位 我都试试看好了 这需求真诡异阿... 02/13 18:47
12F:→ ClareQ: 这个需求很怪,不应这样做...实际运用的场景是什麽呢? 02/13 21:09
13F:→ ClareQ: 如果只是单纯的POJO,还会遇到B是不是个A的问题...如 02/13 21:10
14F:→ ClareQ: equals和hashCode的实作,还有Comparable的实作等... 02/13 21:10
15F:推 haha02: 用Gson把父类别转toJson再用子类别fromJson如何?虽然他 02/14 02:25
16F:→ haha02: 底层也是用reflection做… 02/14 02:25
17F:推 pzyc79: 你有考虑到Fields被子类别遮蔽的的情况吗 02/15 15:50
18F:→ Killercat: 其实这算是之前造成的历史共业,不过我也觉得不妥 02/16 13:06
19F:→ Killercat: 我後来舍弃掉继承改用包含 看起来是清爽很多 02/16 13:06
20F:→ Killercat: 先谢谢大家提供的意见啦.... 02/16 13:06
21F:→ Killercat: (背後改了一早上的utilities就当作还技术债吧 XD) 02/16 13:24