private KeanuSavedBayesNet.NamedParam getTypedParam(String paramName, Object param) { if (Vertex.class.isAssignableFrom(param.getClass())) { return getParam(paramName, (Vertex)param); } else if (DoubleTensor.class.isAssignableFrom(param.getClass())){ return getParam(paramName, builder -> builder.setDoubleTensorParam(getTensor((DoubleTensor) param))); } else if (IntegerTensor.class.isAssignableFrom(param.getClass())) { return getParam(paramName, builder -> builder.setIntTensorParam(getTensor((IntegerTensor) param))); } else if (BooleanTensor.class.isAssignableFrom(param.getClass())) { return getParam(paramName, builder -> builder.setBoolTensorParam(getTensor((BooleanTensor) param))); } else if (Double.class.isAssignableFrom(param.getClass())) { return getParam(paramName, builder -> builder.setDoubleParam((double) param)); } else if (Integer.class.isAssignableFrom(param.getClass())) { return getParam(paramName, builder -> builder.setIntParam((int) param)); } else if (Long.class.isAssignableFrom(param.getClass())) { return getParam(paramName, builder -> builder.setLongParam((long) param)); } else if (String.class.isAssignableFrom(param.getClass())) { return getParam(paramName, builder -> builder.setStringParam((String) param)); } else if (Boolean.class.isAssignableFrom(param.getClass())) { return getParam(paramName, builder -> builder.setBoolParam((boolean) param)); } else if (Long[].class.isAssignableFrom(param.getClass())) { return getParam(paramName, (long[]) param); } else if (Vertex[].class.isAssignableFrom(param.getClass())) { return getParam(paramName, (Vertex[]) param); } else if (Integer[].class.isAssignableFrom(param.getClass())) { return getParam(paramName, (int[]) param); } else { throw new IllegalArgumentException("Unknown Parameter Type to Save: " + param.getClass().toString()); } }