찾다

 >  Q&A  >  본문

spring - java反射问题求解

写一个方法:
public void (类,参数1,参数2) {

}
调用这个方法的类是各个不同的类,但是这些类中都有一个公共的属性isTm,想把这个函数定义成公共的。不同的类传进来,可以根据不同的类,来设置属性isTm的值,应该如何设计和实现?
举例如下:

package basic;

public class Test {

    public void updateIsTm(T<? extends Object> pojo) {
        if (null != pojo) {
            // TODO
            //如果传进来的是A a对象,就调用a.setIsTm()方法,修改值。 
            //如果传进来的是B b对象,就调用b.setIsTm()方法,修改值。
        }
    }
}


 //类A和类B有公共的属性isTm
     
    class A {
    
        String a;
        String isTm;
    
        public String getIsTm() {
            return isTm;
        }
    
        public void setIsTm(String isTm) {
            this.isTm = isTm;
        }
    }
    
    class B {
    
        String b;
        String isTm;
    
        public String getIsTm() {
            return isTm;
        }
    
        public void setIsTm(String isTm) {
            this.isTm = isTm;
        }
    }

谢谢~~

PHP中文网PHP中文网2812일 전287

모든 응답(3)나는 대답할 것이다

  • 巴扎黑

    巴扎黑2017-04-18 09:24:49

    이 함수를 호출하려는 모든 클래스가 이 인터페이스를 구현하도록 인터페이스를 설계하세요

    으아악

    보충:
    이 함수를 호출하는 클래스를 수정하지 않고 방해가 되지 않는 디자인을 한다면 아마도 리플렉션만 사용할 수 있을 것입니다

    으아악

    이 경우 통화의 안전을 보장하기 위해 계약에 의존해야 합니다.

    회신하다
    0
  • 怪我咯

    怪我咯2017-04-18 09:24:49

    으아악

    출력 결과:

    A는 isTm=haha를 설정하고 있습니다
    B는 다시 isTm=haha를 설정하고 있습니다

    제목으로 보아 제네릭 디자인의 필요성은 느껴지지 않습니다.

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-18 09:24:49

    디자인 관점에서는 isTm 속성을 추상화하기 위해 인터페이스나 추상 클래스를 디자인하는 것이 더 좋습니다.

    그러나 이러한 클래스를 더 이상 수정할 수 없고 공통 상위 클래스나 인터페이스를 상속하거나 구현하지 않는 경우 리플렉션만 사용할 수 있습니다.

    하지만 리플렉션을 사용하면 코드가 매우 보기 흉해지며, 잘 사용하지 않으면 지뢰밭 같은 행동이 됩니다.

    회신하다
    0
  • 취소회신하다