FieldProperty.java revision a9de7ef39a1f086be052dfcc75ad671078c5a8a4
1/** 2 * Copyright (c) 2008-2009 Andrey Somov 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16package org.yaml.snakeyaml.introspector; 17 18import java.lang.reflect.Field; 19import java.lang.reflect.ParameterizedType; 20import java.lang.reflect.Type; 21 22import org.yaml.snakeyaml.error.YAMLException; 23 24public class FieldProperty extends Property { 25 private final Field field; 26 27 public FieldProperty(Field field) { 28 super(field.getName(), field.getType()); 29 this.field = field; 30 } 31 32 @Override 33 public void set(Object object, Object value) throws Exception { 34 field.set(object, value); 35 } 36 37 @Override 38 public Object get(Object object) { 39 try { 40 return field.get(object); 41 } catch (Exception e) { 42 throw new YAMLException("Unable to access field " + field.getName() + " on object " 43 + object + " : " + e); 44 } 45 } 46 47 @Override 48 public Type[] getActualTypeArguments() { 49 if (field.getGenericType() instanceof ParameterizedType) { 50 ParameterizedType t = (ParameterizedType) field.getGenericType(); 51 return t.getActualTypeArguments(); 52 } else { 53 return null; 54 } 55 } 56}