Reputation: 18806
We have the following enumeration:
public enum ComponentTypes {
PDIFF(301),
TDIFF(302),
TADJ(303);
private long componentTypeId;
private ComponentTypes(long componentTypeId){
this.componentTypeId = componentTypeId;
}
public Long getId(){
return this.componentTypeId;
}
}
In one of our tests setup we do c.setComponentTypeId(ComponentTypes.TADJ.getId())
but when c.getComponentTypeId()
is invoked in the test it throws NullPointerException
, yet c.setComponentTypeId(303L)
works as expected. What am I missing with use of the enum to set the value?
EDIT
Looks like @Tom was straight on with the long/Long inconsistency. Now that getId()
returns long
not Long
it works as expected.
EDIT
Looks like what I said earlier was wrong autoboxing does work there as expected is no issue after I refreshed the system jvm etc -- which doesn't make any sense to me!
Upvotes: 0
Views: 892
Reputation: 2945
Where are you initializing c? I suspect this is the issue and that the NullPointerException you're receiving is actually coming from the setComponentTypeId call not the getter.
Using your code for the enum (with no modifications) I ran the following:
ComponentTypes c = ComponentTypes.PDIFF;
c.setComponentTypeId(ComponentTypes.TADJ.getId());
System.out.println(c.getComponentTypeId());
c.setComponentTypeId(303L);
System.out.println(c.getComponentTypeId());
My Output:
303
303
However; If c is not initialized properly, you get a NullPointerException when you attempt to call c.setComponentTypeId for the first time.
Upvotes: 0
Reputation: 3681
You say in the test you call setComponentId, but you have not included the source for this method. Can you paste this, and also show how the 'c' object in the test is created?
Tom, if they are using a version of recent java supporting autoboxing surely long/Long won't matter?
Upvotes: 0
Reputation: 39606
You don't say what type "c" is, but I suspect its setter is not doing what you think it is -- the NullPointerException is an indication of auto-unboxing gone wrong. You enum itself doesn't appear to have an issue, although returning a Long
when the member is long
is a code smell.
Actually, calling c.setComponentTypeId()
with the enum's ID is another code smell. Why aren't you using the enum itself, with c.setComponentType()
? The way you're doing it pretty much loses you all the value of enums.
Upvotes: 1