diff --git a/src/main/java/dev/openfeature/sdk/Value.java b/src/main/java/dev/openfeature/sdk/Value.java index f4ad909de..672b65c1a 100644 --- a/src/main/java/dev/openfeature/sdk/Value.java +++ b/src/main/java/dev/openfeature/sdk/Value.java @@ -125,14 +125,27 @@ public boolean isStructure() { } /** - * Check if this Value represents a List. + * Check if this Value represents a List of Values. * * @return boolean */ public boolean isList() { - return this.innerObject instanceof List - && (((List) this.innerObject).isEmpty() - || ((List) this.innerObject).get(0) instanceof Value); + if (!(this.innerObject instanceof List)) { + return false; + } + + List list = (List) this.innerObject; + if (list.isEmpty()) { + return true; + } + + for (Object obj : list) { + if (!(obj instanceof Value)) { + return false; + } + } + + return true; } /** diff --git a/src/test/java/dev/openfeature/sdk/ValueTest.java b/src/test/java/dev/openfeature/sdk/ValueTest.java index aa6ac62f9..53513afd1 100644 --- a/src/test/java/dev/openfeature/sdk/ValueTest.java +++ b/src/test/java/dev/openfeature/sdk/ValueTest.java @@ -134,4 +134,12 @@ class Something {} fail("Unexpected exception occurred.", e); } } + + @Test public void valueConstructorValidateListInternals() { + List list = new ArrayList<>(); + list.add(new Value("item")); + list.add("item"); + + assertThrows(InstantiationException.class, ()-> new Value(list)); + } }