docs: public static <T extends ImageGray<T>> ImageBorder<T>
  	single(Class<T> imageType, BorderType borderType)
  	{
  		Class<?> borderClass;
  		switch(borderType) {
  			case SKIP:
  				throw new IllegalArgumentException("Skip border can't be implemented here and has to be done " +
  						"externally.  Call this might be a bug. Instead pass in EXTENDED and manually skip over the " +
  						"pixel in a loop some place.");
  //				borderClass = BorderIndex1D_Exception.class;
  //				break;
  
  			case NORMALIZED:
  				throw new IllegalArgumentException("Normalized can't be supported by this border interface");
  			
  			case REFLECT:
  				borderClass = BorderIndex1D_Reflect.class;
  				break;
  
  			case EXTENDED:
  				borderClass = BorderIndex1D_Extend.class;
  				break;
  
  			case WRAP:
  				borderClass = BorderIndex1D_Wrap.class;
  				break;
  
  			case ZERO:
  				return FactoryImageBorder.singleValue(imageType, 0);
  
  			default:
  				throw new IllegalArgumentException("Border type not supported: "+borderType);
  		}
  
  		if( imageType == GrayF32.class )
  			return (ImageBorder<T>)new ImageBorder1D_F32(borderClass);
  		if( imageType == GrayF64.class )
  			return (ImageBorder<T>)new ImageBorder1D_F64(borderClass);
  		else if( GrayI.class.isAssignableFrom(imageType) )
  			return (ImageBorder<T>)new ImageBorder1D_S32((Class)borderClass);
  		else if( imageType == GrayS64.class )
  			return (ImageBorder<T>)new ImageBorder1D_S64(borderClass);
  		else
  			throw new IllegalArgumentException("Unknown image type: "+imageType.getSimpleName());
  	}