1 package org.opentrafficsim.base.parameters.constraint; 2 3 import java.util.Collection; 4 import java.util.HashSet; 5 6 /** 7 * Constraint that checks whether the value is any of a given collection of classes, where each class is a sub class of a given 8 * type. 9 * <p> 10 * Copyright (c) 2013-2019 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br> 11 * BSD-style license. See <a href="http://opentrafficsim.org/node/13">OpenTrafficSim License</a>. 12 * <p> 13 * @version $Revision$, $LastChangedDate$, by $Author$, initial version 30 jun. 2017 <br> 14 * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a> 15 * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a> 16 * @author <a href="http://www.transport.citg.tudelft.nl">Wouter Schakel</a> 17 * @param <T> super type for all possible classes, e.g. TacticalPlanner 18 */ 19 public class ClassConstraint<T> extends CollectionConstraint<Class<? extends T>> 20 { 21 22 /** 23 * @param classes Collection<Class<? extends T>>; acceptable classes 24 */ 25 private ClassConstraint(final Collection<Class<? extends T>> classes) 26 { 27 super(classes); 28 } 29 30 /** 31 * Creates a new instance with given collection. 32 * @param objs Class<? extends T>...; acceptable classes 33 * @param <T> type class 34 * @return new instance with given collection 35 */ 36 @SafeVarargs 37 public static <T> ClassConstraint<T> newInstance(final Class<? extends T>... objs) 38 { 39 Collection<Class<? extends T>> collection = new HashSet<>(); 40 for (Class<? extends T> clazz : objs) 41 { 42 collection.add(clazz); 43 } 44 return new ClassConstraint<>(collection); 45 } 46 47 /** {@inheritDoc} */ 48 @Override 49 @SuppressWarnings("checkstyle:designforextension") 50 public String toString() 51 { 52 return "ClassConstraint [classes=" + super.objects + "]"; 53 } 54 55 }