The real issue with reflection-based navigation (apart from that it clearly bypasses module boundaries and makes assumptions about the existence of other code that is not guaranteed to exist) is that you cannot guarantee the type-safety of passing arguments, not even to the degree that the Activity.newIntent/Fragment.newInstance pattern provided.
If you use interfaces like aforementioned, then Dagger would check at compilation time if the interface implementation can be provided. Cleaner than checking "if strings match".