I personally would always prefer compile-time errors/warnings.  That way it becomes apparent right away if something is wrong rather than making a build and needing to run across the code to find the problem which could be missed.  The only catch there is if you needed the method for some reason to be generic and handle different types.  In this particular case I'd prefer to force a type in the signature and get rid of the throw for the reasons given above.