spring - java反射问题求解
PHP中文网
PHP中文网 2017-04-18 09:22:49
0
3
224

写一个方法:
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中文网

认证高级PHP讲师

全員に返信(3)
巴扎黑

この関数を呼び出したいすべてのクラスがこのインターフェースを実装するようにインターフェースを設計します

リーリー

補足:
この関数を呼び出すクラスを変更せず、非侵入的な設計を行う場合は、おそらくリフレクションのみを使用できます

リーリー

この場合、通話のセキュリティを確保するには契約に依存する必要がありますが、これはお勧めできません。

いいねを押す +0
刘奇

リーリー

出力結果:

A は isTm=haha を設定しています
B は再び isTm=haha を設定しています

タイトルから判断すると、一般的なデザインの必要性がわかりません。

いいねを押す +0
Ty80

設計の観点からは、isTm 属性を抽象化するインターフェイスまたは抽象クラスを設計する方が良いでしょう。

しかし、これらのクラスを変更できなくなり、共通の親クラスまたはインターフェイスを継承または実装していない場合は、リフレクションのみを使用できます。

しかし、リフレクションを使用するとコードが非常に醜くなり、うまく使用しないと問題を見つけるのが難しくなります。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!