/*
 * @author Ranides Atterwim <ranides@gmail.com>
 * @copyright Ranides Atterwim
 * @license WTFPL
 * @url http://ranides.net/projects/assira
 */

package net.ranides.assira.reflection;

import net.ranides.assira.generic.Wrapper;

/**
 *
 * @author Ranides Atterwim <ranides@gmail.com>
 */
public interface BeanProperty {
    
    String name();
    
    IClass<?> type();
        
    Wrapper<Object> bind(Object that);
    
    <T> Wrapper<T> $bind(Object that);
    
    void set(Object that, Object value);
    
    Object get(Object that);
    
    <T> T $get(Object that);
    
    Object replace(Object that, Object value);
    
    boolean isReadable();
    
    boolean isWritable();
}
