Ranides Atterwim 10 년 전
부모
커밋
f130aa9701

+ 5 - 1
assira/src/test/java/net/ranides/assira/reflection/impl/RConstructorTest.java

@@ -126,7 +126,11 @@ public class RConstructorTest {
     
     @Test
     public void testMatchGeneric() {
-        // @todo (assira #4) reflective: match generics
+        // @todo (assira #6) reflective: generics: match
+        // mamy konstruktor public <R extends Number> Record(R param1, R param2) {
+        // nie wiem czy istnieje jakakolwiek szansa, żeby w oparciu o type-bounds match zaimplementować
+        // chyba takie "super-elastic" metody będą po prostu bezużyteczne w przypadku reflective IClass
+        // normalnie to dużo prostsze przypadki nie przechodzą, więc płaczu nie ma
         IMethods list1 = ic.constructors().require(IArguments.typeinfo(Number.class, Number.class));
         IMethods list2 = ic.constructors().matches(IClasses.typeinfo(Number.class, Number.class));
         IMethods list3 = ic.constructors().accepts(0,0);

+ 14 - 4
assira/src/test/java/net/ranides/assira/reflection/impl/RWClassTest.java

@@ -34,10 +34,20 @@ public class RWClassTest {
         assertThrows(UnsupportedOperationException.class, ()->{
             ic1.raw();
         });
-        // @todo (assira #6) reflective: isInstance dla wildcards
-//        assertEquals(false, ic1.isInstance(new ArrayList<Float>()));    // ?
-//        assertEquals(false, ic1.isInstance(new ArrayList<Double>()));   // ?
-//        assertEquals(false, ic1.isInstance(new LinkedList<Float>()));   // ?
+        // @todo (assira #6) reflective: generics: isInstance dla wildcards
+        // rzecz w tym, że my tu mamy unresolved params, bo przekazujemy objekt (i type erasure wchodzi)
+        // a to oznacza, że NIE powinno tutaj nic matchować na ten moment
+        // o ile nie zrobimy obsługi prawdziwej dla atrybutu IAttribute.RESOLVED
+        // tylko w takim wypadku możemy być "tolerancyjniejsi" względem erasure'owanych typów
+        // i je przepuszczać
+        
+        // test dla wildcardów powinien opierać się na isSuper/isSubclass dla TypeToken jako argumentu
+        // bo on zawiera całe info na temat typu testowanego
+//        System.out.printf("%s%n", ic1);
+//        assertTrue(ic1.isInstance(new ArrayList<Float>())); 
+
+        assertFalse(ic1.isInstance(new ArrayList<Double>()));
+        assertFalse(ic1.isInstance(new java.util.LinkedList<Float>()));
         assertEquals("[PUBLIC]", ic1.attributes().toString());
         assertEquals("[]", ic1.annotations().toString());