java和kotlin的Builder模式的继承

本文详细介绍了在Android开发中如何使用Builder模式创建对话框,并通过Java和Kotlin代码示例展示了如何实现多重继承以增强Builder模式的功能。文章覆盖了基类、子类和孙子类的构造过程,以及如何在不同层次的Builder类中设置属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在android开发过程中,经常会使用builder模式来设置属性,但是有时候会有存在继承关系,
用以下方式解决:
1.java双重继承 示例

public class AlertDialog extends BaseDialog {
 	protected BaseBuilder<Builder> mBuilder;

    protected void setBuilder(BaseBuilder<Builder> builder){
        mBuilder = builder;
     }
     public abstract static class BaseBuilder<T extends BaseBuilder> {
        CharSequence title;
        public T title(CharSequence title){
            this.title = title;
            return (T) this;
        }
    }
  public static class Builder extends BaseBuilder<Builder>{
        public AlertDialog build(){
            AlertDialog dialog = new AlertDialog();
            dialog.setBuilder(this);
            return dialog;
        }
    }   
}

public class SubAlertDialog extends BaseDialog {
  	Builder mBuilder ;
    protected void setBuilder(BaseBuilder builder){
        super.setBuilder(builder);
        mBuilder = (Builder) builder;
      }
    public static class Builder extends AlertDialog.BaseBuilder<Builder> {
       String msg;

        public Builder msg( String msg){
            this.msg= msg;
            return this;
        }
         public SubAlertDialog build(){
            SubAlertDialog dialog = new SubAlertDialog ();
            dialog.setBuilder((BaseBuilder)this);
            return dialog;
        }
    } 
}

  

1.kotlin多重继承示例
父类:

 open class ParentDialog : BaseDialogFragment() {
	   protected var mBuilder: BaseBuilder<Builder>? = null;
	    internal open fun setBuilder(builder: BaseBuilder<Builder>) {
       	 this.mBuilder = builder;
   		}
		 open class BaseBuilder<T : BaseBuilder<T>> {

        var title: CharSequence? = null
            private set
		  fun title(title: CharSequence?): T {
            this.title = title
            return this as T;
        }
    }
  	open class Builder : BaseBuilder<Builder>() {
        open fun build(): ParentDialog {
            var dialog = ParentDialog ();
            dialog.setBuilder(this)
            return dialog;
        }

    }
 }
  

子类

 open class SubDialog : ParentDialog () {

 	class Builder : SubDialog <OptionsPickerDialog.Builder>() {

        open fun build(): SubDialog {
            var dialog = SubDialog ();
            dialog.setBuilder(this as BaseBuilder<ParentDialog.Builder>)
            return dialog;
        }
   	 }
	  open abstract class SubAbstractBuilder<T : SubAbstractBuilder<T>> :
            ParentDialog .BaseBuilder<T>() {

        var optionsViewCount: Int = 1
            private set
		 fun optionsViewCount(optionsViewCount: Int): T {
            this.optionsViewCount = optionsViewCount
            return this as T;
        }
 }

孙子类:

 open class GrandSonDialog : SubDialog () {
 		open class Builder : GrandSonAbstractBuilder<Builder>() {
 			  open fun build(): GrandSonDialog {
 			  	   var dialog = GrandSonDialog ();
 			  	    dialog.setBuilder(this as BaseBuilder<ParentDialog.Builder>)
 			  	    return dialog 
 			  }
 		}
	   open abstract class GrandSonAbstractBuilder<T : GrandSonBuilder<T>> :
            SubAbstractBuilder<T>() {

        var startDate: Date? = null
            private set
		 /**
         * 设置起始时间
         */
        open fun startDate(startDate: Date?): T {
            this.startDate = startDate
            return this as T;
        }
       }

 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值