View Javadoc

1   package net.sf.josceleton.commons.reflect;
2   
3   import java.lang.reflect.Constructor;
4   
5   import com.google.inject.Inject;
6   import com.google.inject.assistedinject.Assisted;
7   
8   /**
9    * Briding Java's reflection classes to Josceleton's pure interface world ;)
10   */
11  public class ClassAdapterImpl<T> implements ClassAdapter<T> {
12  	
13  	private static final long serialVersionUID = 5544384595420106807L;
14  
15  	public static final ClassAdapterImpl<String> STRING = new ClassAdapterImpl<String>(String.class);
16  	
17  	private final Class<T> innerClass;
18  
19  	
20  	@Inject public ClassAdapterImpl(@Assisted final Class<T> innerClass) {
21  		this.innerClass = innerClass;
22  	}
23  	
24  	// TODO @Deprecated avoid static factory method ClassAdapterImpl.create()
25  	public static <X> ClassAdapterImpl<X> create(final Class<X> innerClass) {
26  		return new ClassAdapterImpl<X>(innerClass);
27  	}
28  	
29  	/** {@inheritDoc} from {@link ClassAdapter} */
30  	@Override public final boolean isPrimitive() {
31  		return this.innerClass.isPrimitive();
32  	}
33  
34  	@Override public final boolean isAssignableFrom(final ClassAdapter<?> targetType) {
35  		return this.innerClass.isAssignableFrom(targetType.getInnerClass());
36  	}
37  
38  	@Override public final Class<T> getInnerClass() {
39  		return this.innerClass;
40  	}
41  
42  	@Override public final Constructor<?>[] getConstructors() {
43  		return this.innerClass.getConstructors();
44  	}
45  
46  	@Override public final String getName() {
47  		return this.innerClass.getName();
48  	}
49  	
50  	@Override public final String toString() {
51  		return "ClassAdapterImpl[innerClass.name=" + this.innerClass.getName() + "]";
52  	}
53  }