2012-08-31 22 views
9

Tôi có một câu hỏi liên quan đến các trường lớp Java.Sao chép các trường từ lớp cha của nó trong Java

Tôi có hai lớp Java: Phụ huynh và trẻ em

class Parent{ 
    private int a; 
    private boolean b; 
    private long c; 

    // Setters and Getters 
    ..... 
} 


class Child extends Parent { 
    private int d; 
    private float e; 

    // Setters and Getters 
    ..... 
} 

Bây giờ tôi có một thể hiện của lớp Parent. Có cách nào để tạo ra một thể hiện của lớp Child và sao chép tất cả các trường của lớp cha mà không cần gọi từng người định cư?

tôi không muốn làm điều này:

Child child = new Child(); 
    child.setA(parent.getA()); 
    child.setB(parent.getB()); 
    ...... 

Ngoài ra, Parent không có một constructor tùy chỉnh và tôi không thể thêm constructor vào nó.

Vui lòng cho bạn ý kiến.

Rất cám ơn.

+0

Làm thế nào về trọng cha mẹ getter và setter trong lớp trẻ em. Như Nambari gợi ý. – km1

Trả lời

0

Bạn có thể đặt các trường của mình là protected thay vì riêng tư và truy cập chúng trực tiếp trên lớp con. cái đó có giúp ích không?

+0

Điều này sẽ không giúp ích gì, từ câu hỏi có vẻ như anh ta cần tạo ra một thể hiện mới của Trẻ từ một trường hợp khác của Phụ Huynh – mavroprovato

0

Bạn có thể tạo một hàm tạo Child chấp nhận Phụ huynh. Nhưng ở đó, bạn sẽ phải thiết lập tất cả các giá trị từng cái một (nhưng bạn có thể truy cập trực tiếp vào các thuộc tính Child, mà không cần thiết lập).

Có một giải pháp thay thế với sự phản ánh, nhưng nó chỉ làm tăng thêm sự phức tạp cho điều này. Bạn không muốn nó chỉ để tiết kiệm một số đánh máy.

1

Bạn đã thử thực hiện việc phản ánh này chưa? Kỹ thuật bạn gọi từng người một nhưng bạn không cần phải biết tất cả tên của chúng.

15

Bạn đã thử chưa?

BeanUtils.copyProperties (trẻ em, cha mẹ)

http://commons.apache.org/beanutils/apidocs/org/apache/commons/beanutils/BeanUtils.html

+0

Cảm ơn câu trả lời .. Một chút xác thực, Đó là BeanUtils.copyProperties (cha mẹ, con) hoặc (nguồn , mục tiêu) – sheetal

+0

@sheetal Eh ... no. Đó là 'BeanUtils.copyProperties (đích, nguyên bản)': https://github.com/apache/commons-beanutils/blob/f9ac36d916bf2271929b52e9b40d5cd8ea370d4b/src/main/java/org/apache/commons/beanutils/BeanUtils.java#L132 – Jasper

+0

@ Jasper Tôi đoán tôi đang sử dụng khung mùa xuân sau đó https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/BeanUtils.html – sheetal

4

bạn có thể sử dụng phản ánh tôi làm điều đó và làm việc tốt cho tôi:

public Child(Parent parent){ 
    for (Method getMethod : parent.getClass().getMethods()) { 
     if (getMethod.getName().startsWith("get")) { 
      try { 
       Method setMethod = this.getClass().getMethod(getMethod.getName().replace("get", "set"), getMethod.getReturnType()); 
       setMethod.invoke(this, getMethod.invoke(parent, (Object[]) null)); 

      } catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { 
       //not found set 
      } 
     } 
    } 
} 
Các vấn đề liên quan