2011-08-24 13 views
8

W książce "Thinking in Java" znajduje się przykład, jak uzyskać informacje o fasoli za pomocą Reflection/Introspection.Jak typ właściwości bean może być pusty?

W linii 4 powyższego przykładu znajduje się sprawdzenie, czy właściwość PropertyType ma wartość NULL. Kiedy i w jakich okolicznościach tak się dzieje? Czy możesz dać przykład?

Odpowiedz

2

Javadoc dla metody państw klasy PropertyDescriptorgetPropertyType:

Wynik może być „null”, jeśli jest to nieruchomość indeksowane że nie support nieindeksowane dostępu.

Właściwości indeksowane to te, które są wspierane przez tablicę wartości. Oprócz standardowych metod dostępu JavaBean, indeksowane właściwości mogą również zawierać metody pobierania/ustawiania poszczególnych elementów w tablicy, poprzez określenie indeksu. JavaBean, może zatem mieć indeksowane pobierające i ustawiające:

public PropertyElement getPropertyName(int index) 
public void setPropertyName(int index, PropertyElement element) 

oprócz średnia getter i setter dla non-indeksowanego dostępu:

public PropertyElement[] getPropertyName() 
public void setPropertyName(PropertyElement element[]) 

Przechodzenie przez opisem Javadoc, jeśli pominąć nieindeksowane obiekty pomocnicze, możesz uzyskać wartość zwracaną null dla typu właściwości deskryptora właściwości.

Tak więc, jeśli masz JavaBeans z następujących odmian, można uzyskać wartość null powrotu:

class ExampleBean 
{ 

    ExampleBean() 
    { 
     this.elements = new String[10]; 
    } 

    private String[] elements; 

    // standard getters and setters for non-indexed access. Comment the lines in the double curly brackets, to have getPropertyType return null. 
    // {{ 
    public String[] getElements() 
    { 
     return elements; 
    } 

    public void setElements(String[] elements) 
    { 
     this.elements = elements; 
    } 
    // }} 

    // indexed getters and setters 
    public String getElements(int index) { 
     return this.elements[index]; 
    } 

    public void setElements(int index, String[] elements) 
    { 
     this.elements[index] = elements; 
    } 

} 

Uwaga, podczas których można realizować sam z indeksowanych udostępniające właściwości, nie zaleca się robić tak więc, ponieważ standardowe akcesory są używane do odczytu i zapisu wartości, jeśli używasz metod getReadMethod i getWriteMethod z .

3

Z JavaDoc:

zwraca null, jeżeli typ jest indeksowane właściwość, która nie obsługuje nieindeksowane dostępu.

Domyślam się, że jeśli typ własności jest własnością indeksowaną (jak tablica), to zwróci null.

2

To zwraca wartość null, gdy masz metodę taką jak int getValue(int index).

Poniższe drukuje kod

double is null 
ints class [I 

Klasa:

import java.beans.BeanInfo; 
import java.beans.IntrospectionException; 
import java.beans.Introspector; 
import java.beans.PropertyDescriptor; 

public class BeanInfos { 

public static void main(String[] args) { 

    try { 
     BeanInfo bi = Introspector.getBeanInfo(ClassA.class, Object.class); 
     for (PropertyDescriptor d : bi.getPropertyDescriptors()) { 
     Class<?> p = d.getPropertyType(); 
     if (p == null) 
      System.out.println(d.getName() + " is null"); 
     else 
      System.out.println(d.getName() + " " + p); 
     } 
    } catch (IntrospectionException e) { 
     e.printStackTrace(); 
    } 
    } 

} 

class ClassA { 
    private int[] ints; 
    private double[] doubles; 

    public int[] getInts() { 
    return ints; 
    } 

    public void setInts(int[] ints) { 
    this.ints = ints; 
    } 

    public double getDouble(int idx) { 
    return doubles[idx]; 
    } 

    public void setDoubles(double val, int idx) { 
    this.doubles[idx] = val; 
    } 
} 
Powiązane problemy