【问题标题】:Overriding properties from abstract class in Salesforce Apex覆盖 Salesforce Apex 中抽象类的属性
【发布时间】:2023-03-04 19:07:01
【问题描述】:

我在 apex 中有一个抽象类,其中有几个我想在子类中覆盖的属性。根据文档,属性支持覆盖和虚拟访问修饰符。但是,当我尝试在父类或子类中使用它们中的任何一个时,我收到一条错误消息,指出变量不能标记为虚拟/覆盖。这是导致此错误的代码的传真:

public abstract class Row{
    public virtual double value{
        get{return value==null ? 0 : value;}
        set;
    }
}

public class SummaryRow extends Row{
    private list<Row> childRows;
    public override double value{
        get{
            totalValue = 0;
            for(Row childRow:childRows){
                totalvalue += childRow.value;
            }
            return totalValue;
        }
    }
}

是否不支持此功能,或者我缺少什么?

提前致谢。

【问题讨论】:

    标签: properties salesforce apex-code


    【解决方案1】:

    不幸的是,据我所知,这是文档中的错误。我只能将override 和virtual 修饰符应用于方法。当然,您可以通过手动编写属性 getter/setter 方法来获得所需的效果:

    public abstract class TestRow {
        public Double value;
    
        public virtual Double getValue() {
            return value==null ? 0 : value;
        }
    
        public void setValue(Double value) {
            this.value = value;
        }
    }
    
    public class SummaryTestRow extends TestRow {
        private list<TestRow> childRows;
    
        public override Double getValue() {
            Double totalValue = 0;
            for(TestRow childRow : childRows){
                totalValue += childRow.value;
            }
    
            return totalValue;  
        }
    }
    

    【讨论】:

    • 这就是我最终要做的,但我希望有一种更简洁的方法,我只是把语法弄乱了。
    • 这是否适用于 Visualforce 中的 2 路绑定?它可以绑定到输入字段吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多