-
Notifications
You must be signed in to change notification settings - Fork 1.7k
NULL_INJECTED_INTO_NON_NULLABLE
Guice will throw NULL_INJECTED_INTO_NON_NULLABLE error when null is injected
into a non-nullable
injection point.
Example:
final class Foo {
@Inject
Foo(Bar bar) {
// If Guice does not enforce bar to be non-null, then the next line will
// throw NullPointerException when bar is null. If bar is passed down
// somewhere else, the eventual exception might be hard to trace so it's
// better to fail early.
bar.doSomething();
}
}
final class BarModule extends AbstractModule {
@Provides
Bar provideBar(Baz baz) {
return baz.getBar(); // Baz.getBar may return null
}
}The above example will cause NULL_INJECTED_INTO_NON_NULLABLE error when
provideBar returns null for Bar.
If the binding is not expected to be null then make sure that wherever the
binding is provided does not return null.
Example:
final class BarModule extends AbstractModule {
@Provides
Bar provideBar(Baz baz) {
// Baz.getBar may return null, so handle it here by returning a default
// instance of Bar when baz.getBar returned null
Bar bar = baz.getBar();
if (bar == null) {
return new Bar("some default value");
} else {
return bar;
}
}
}If null is a valid value for a binding, mark the parameter or field as
explicitly @Nullable and handle the possible null value.
Examples:
import javax.annotation.Nullable;
final class Foo {
private final Optional<Bar> optionalBar;
@Inject
Foo(@Nullable Bar bar) {
// Handle the possible null value here
this.optionalBar = Optional.fromNullable(bar);
}
}See Use @Nullable for more
information.
If you've annotated the parameter as @Nullable but are still getting the
NULL_INJECTED_INTO_NON_NULLABLE error, then make sure you are using a
@Nullable annotation that
Guice supports.
-
User's Guide
-
Integration
-
Extensions
-
Internals
-
Releases
-
Community