JBBPNamedNumericFieldMap implements JBBPFieldFinder { @Override public <T extends JBBPAbstractField> T findFieldForType(final Class<T> fieldType) { JBBPUtils.assertNotNull(fieldType, "Type must not be null"); int count = 0; T result = null; for (final JBBPNumericField f : fieldMap.values()) { if (fieldType == f.getClass()) { result = fieldType.cast(f); count++; } } if (count > 1) { throw new JBBPTooManyFieldsFoundException(count, "Too many fields detected", null, fieldType); } return result; } JBBPNamedNumericFieldMap();  JBBPNamedNumericFieldMap(final JBBPExternalValueProvider externalValueProvider); JBBPExternalValueProvider getExternalValueProvider(); JBBPNumericField get(final JBBPNamedFieldInfo namedField); void putField(final JBBPNumericField field); JBBPNumericField remove(final JBBPNamedFieldInfo nameInfo); JBBPNumericField findForFieldOffset(final int offset); @Override T findFirstFieldForType(final Class<T> fieldType); @Override T findLastFieldForType(final Class<T> fieldType); @Override T findFieldForType(final Class<T> fieldType); @Override T findFieldForNameAndType(final String fieldName, final Class<T> fieldType); @Override T findFieldForPathAndType(final String fieldPath, final Class<T> fieldType); @Override JBBPAbstractField findFieldForName(final String fieldName); @Override JBBPAbstractField findFieldForPath(final String fieldPath); @Override boolean nameExists(final String fieldName); @Override boolean pathExists(final String fieldPath); void clear(); boolean isEmpty(); int size(); int getExternalFieldValue(final String externalFieldName, final JBBPCompiledBlock compiledBlock, final JBBPIntegerValueEvaluator evaluator);  }
@Test public void testFindFieldForType() { final JBBPNamedNumericFieldMap map = new JBBPNamedNumericFieldMap(); final JBBPNumericField field1 = new JBBPFieldInt(new JBBPNamedFieldInfo("test.test", "test", 0), 123); final JBBPNumericField field2 = new JBBPFieldInt(new JBBPNamedFieldInfo("test.test2", "test2", 0), 123); final JBBPNumericField field3 = new JBBPFieldByte(new JBBPNamedFieldInfo("test.test3", "test3", 0), (byte) 123); map.putField(field1); map.putField(field2); map.putField(field3); assertSame(field3, map.findFieldForType(JBBPFieldByte.class)); assertNull(map.findFieldForType(JBBPFieldLong.class)); try { map.findFieldForType(JBBPFieldInt.class); fail("Must throw exception JBBPTooManyFieldsFoundException"); } catch (JBBPTooManyFieldsFoundException ex) { assertEquals(2, ex.getNumberOfFoundInstances()); } try { map.findFieldForType(null); fail("Must throw NPE"); } catch (NullPointerException ex) { } }