Guice的堆栈跟踪可能会变得如此冗长以致于阅读起来非常痛苦。这是一个例子:
1) No implementation for java.util.Set<com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview.helpers.databaseitem.itemmanipulators.ItemManipulator<com.mydomain.myapp.flash.Cat>> annotated with @com.google.inject.assistedinject.Assisted(value=) was bound.
while locating java.util.Set<com.mydomain.myapp.android.activities.catbrowser.generalizedbrowser.listview.helpers.databaseitem.itemmanipulators.ItemManipulator<com.mydomain.myapp.flash.Cat>> annotated with @com.google.inject.assistedinject.Assisted(value=)
...
如果我可以隐藏类路径,它看起来像:
1) No implementation for Set<ItemManipulator<Cat>> annotated with @Assisted(value=) was bound.
while locating Set<ItemManipulator<Cat>> annotated with @Assisted(value=)
有没有办法配置Guice来执行此操作?
答案 0 :(得分:2)
所以答案是否定的。
如果你看一下guice source code,你会发现负责构建错误消息的com.google.inject.internal.Errors
类。在这个类中,编码Key
正在转换如下:
new Converter<Key>(Key.class) {
public String toString(Key key) {
if (key.getAnnotationType() != null) {
return key.getTypeLiteral() + " annotated with "
+ (key.getAnnotation() != null ? key.getAnnotation() : key.getAnnotationType());
} else {
return key.getTypeLiteral().toString();
}
}
}
下一步是查看TypeLiteral#toString
方法:
@Override public final String toString() {
return MoreTypes.typeToString(type);
}
其中MoreTypes#typeToString
是无法配置的静态方法
public static String typeToString(Type type) {
return type instanceof Class ? ((Class) type).getName() : type.toString();
}