用Java克隆子类

前端之家收集整理的这篇文章主要介绍了用Java克隆子类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要在 Java中克隆一个子类,但是在代码发生这种情况时,我不会知道子类类型,只知道超类.这样做的最佳设计模式是什么?

例:

  1. class Foo {
  2. String myFoo;
  3. public Foo(){}
  4. public Foo(Foo old) {
  5. this.myFoo = old.myFoo;
  6. }
  7. }
  8.  
  9. class Bar extends Foo {
  10. String myBar;
  11. public Bar(){}
  12. public Bar(Bar old) {
  13. super(old); // copies myFoo
  14. this.myBar = old.myBar;
  15. }
  16. }
  17.  
  18. class Copier {
  19. Foo foo;
  20.  
  21. public Foo makeCopy(Foo oldFoo) {
  22.  
  23. // this doesn't work if oldFoo is actually an
  24. // instance of Bar,because myBar is not copied
  25. Foo newFoo = new Foo(oldFoo);
  26. return newFoo;
  27.  
  28. // unfortunately,I can't predict what oldFoo's the actual class
  29. // is,so I can't go:
  30. // if (oldFoo instanceof Bar) { // copy Bar here }
  31. }
  32. }

解决方法

如果您可以控制要复制的类,那么虚拟方法就是前进的方法
  1. class Foo {
  2. ...
  3. public Foo copy() {
  4. return new Foo(this);
  5. }
  6. }
  7. class Bar extends Foo {
  8. ...
  9. @Override public Bar copy() {
  10. return new Bar(this);
  11. }
  12. }

(理想情况下,使类成为抽象或有效的最终.)

猜你在找的Java相关文章