android中Property类的用例是什么?

时间:2014-03-31 17:58:41

标签: android

我刚注意到Property class http://developer.android.com/reference/android/util/Property.html。我可以在http://developer.android.com/about/versions/android-4.0.html#api看到它的一些解释,但是不太了解它的用例。如果有人能指出一些我可以理解的代码片段,那就太棒了。

2 个答案:

答案 0 :(得分:2)

属性是Reflection的包装器。

例如,您有一个对象

public class A {
    private int fieldOfA;
    private int fieldTwo;
    private int fieldThree;

    public void setFieldOfA(int a) {
        fieldOfA = a;
    }

    public int getFieldOfA() {
        return fieldOfA;
    }

    public void setFieldTwo(int a) {
        fieldTwo = a;
    }

    public int getFieldTwo() {
        return fieldTwo;
    }

    public void setFieldThree(int a) {
        fieldThree = a;
    }

    public int getFieldThree() {
        return fieldThree;
    }
}

如果您需要更新phew字段,您必须在没有Properties的更新方法中知道它们的所有名称

private void updateValues(final A a, final int value) {
    a.setFieldOfA(value);
    a.setFieldTwo(value);
    a.setFieldThree(value);
}

使用“属性”,您只能更新属性。

Property aProperty = Property.of(A.class, int.class, "fieldOfA");
Property bProperty = Property.of(A.class, int.class, "fieldTwo");
Property cProperty = Property.of(A.class, int.class, "fieldThree");

Collection<Property<A, Integer>> properties = new HashSet<>();
properties.add(aProperty);
properties.add(bProperty);
properties.add(cProperty);

updateValues(a, 10, properties);

方法是

private void updateValues(final A a, final int value, final Collection<Property<A, Integer>> properties) {
    for (final Property<A, Integer> property : properties) {
        property.set(a, value);
    }
}

正如laalto所记得的,属性动画使用了类似的机制。

答案 1 :(得分:1)

一个例子是property animations. Property类为可以随时间改变以执行动画的属性提供抽象。