2011-03-15 2 views
4

J'ai une classe abstraite dans apex avec plusieurs propriétés que je voudrais remplacer dans une classe enfant. Selon la documentation, les propriétés prennent en charge à la fois le remplacement et les modificateurs d'accès virtuel. Cependant, lorsque j'essaie d'utiliser l'un ou l'autre dans la classe parent ou enfant, j'obtiens une erreur indiquant que les variables ne peuvent pas être marquées comme étant virtuelles/redéfinies. Voici un fac-similé du code qui provoque cette erreur:Substitution des propriétés de la classe abstraite dans Salesforce 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; 
     } 
    } 
} 

Est-ce une fonctionnalité non prise en charge, ou est-il quelque chose que je suis absent?

Merci d'avance.

Répondre

6

Malheureusement, autant que je sache, c'est une erreur dans la documentation. J'ai seulement été en mesure d'appliquer les modificateurs override et virtual aux méthodes. Vous pouvez, bien sûr, obtenir l'effet désiré en écrivant manuellement votre propriété getter/méthodes 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; 
    } 
} 
+0

C'est ce que je fini par faire, mais j'espérais qu'il y avait un moyen plus propre et je venais foiré quelque chose avec la syntaxe. –

+0

cela fonctionne-t-il avec des liaisons à 2 voies dans Visualforce tho? Peut-il être lié à un champ de saisie? – NSjonas

Questions connexes