1 package org.csc.phynixx.common.cast; 2 3 /* 4 * #%L 5 * phynixx-common 6 * %% 7 * Copyright (C) 2014 Christoph Schmidt-Casdorff 8 * %% 9 * Licensed under the Apache License, Version 2.0 (the "License"); 10 * you may not use this file except in compliance with the License. 11 * You may obtain a copy of the License at 12 * 13 * http://www.apache.org/licenses/LICENSE-2.0 14 * 15 * Unless required by applicable law or agreed to in writing, software 16 * distributed under the License is distributed on an "AS IS" BASIS, 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 18 * See the License for the specific language governing permissions and 19 * limitations under the License. 20 * #L% 21 */ 22 23 24 /** 25 * Als Superklasse casted diese Klasse in die Subclass gegebene durch 26 * <code>this.getClass()</code> 27 * 28 * @author Christoph Schmidt-Casdorff 29 */ 30 public class Implementor implements IImplementor { 31 32 /** 33 * prueft, ob uebergebene Klasse <code>assignable</code> von aktueller Klasse ist. 34 */ 35 public <X> X cast(final Class<X> iface) { 36 if (iface == null) { 37 throw new IllegalArgumentException("Parameter 'cls' muss angegeben werden"); 38 } 39 if (iface.isAssignableFrom(this.getClass())) { 40 return iface.cast(this); 41 } 42 throw new ClassCastException("Klasse " + this.getClass() + " kann nicht nach " + iface + " gewandelt werden"); 43 } 44 45 public <X> boolean isImplementationOf(final Class<X> cls) { 46 return (cls != null) && cls.isAssignableFrom(this.getClass()); 47 } 48 49 }