[问题] Java用父类别内容产生子类别

楼主: Killercat (杀人猫™)   2015-02-13 15:13:22
我这边有一个比较特别的需求,想请教一下大家目前的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
只是我在想有没有更好的方法 感谢大家
作者: popcorny (毕业了..@@")   2015-02-13 17:34:00
建议用土炮作法,keep it simple and stupid
作者: realmeat (真肉)   2015-02-13 17:40:00
clonable
楼主: Killercat (杀人猫™)   2015-02-13 17:55:00
pop:土炮问题在于说这bean很多,我不太想一个个稿orz@realmeat:cloneable仅只是保证你有做出clone()可以安全地clone而已 并不会帮你这样clone orz诶等等 cloneable我误会了 也许是个不错的做法....
作者: popcorny (毕业了..@@")   2015-02-13 18:01:00
clonable是产生同型态的instance吧可以试试看BeanUtils. http://goo.gl/S25DER但是前提是A的fields都要包getter
楼主: Killercat (杀人猫™)   2015-02-13 18:47:00
getter...这又是另外一个痛点了orz不过谢谢上面两位 我都试试看好了 这需求真诡异阿...
作者: ClareQ (人比人Cheese人)   2015-02-13 21:09:00
这个需求很怪,不应这样做...实际运用的场景是什么呢?如果只是单纯的POJO,还会遇到B是不是个A的问题...如equals和hashCode的实作,还有Comparable的实作等...
作者: haha02 (来人!上夹棍!)   2015-02-14 02:25:00
用Gson把父类别转toJson再用子类别fromJson如何?虽然他底层也是用reflection做…
作者: pzyc79   2015-02-15 15:50:00
你有考虑到Fields被子类别遮蔽的的情况吗
楼主: Killercat (杀人猫™)   2015-02-16 13:06:00
其实这算是之前造成的历史共业,不过我也觉得不妥我后来舍弃掉继承改用包含 看起来是清爽很多先谢谢大家提供的意见啦....(背后改了一早上的utilities就当作还技术债吧 XD)

Links booklink

Contact Us: admin [ a t ] ucptt.com