Instanceof, class w parametrze metody

0

Istnieje jakaś możliwość, aby:


private A do(B b, SOMETHING)
    {

        
        if (b instanceof SOMETHING) {

przekzac do metody nazwe kalsy do porownania pozniej przez instanceof ?

0

Możesz to zrobić w ten sposób:

public class ClassTest {
      public static void main(String[] args) {
           new ClassTest();
      }

     public ClassTestI() {
		System.out.println("tekst", String.class));
		System.out.println("tekst", Integer.class));
	 }
	 
	 private <T> boolean test(T t, Class exptectedClass) {
		return t.getClass() == exptectedClass;
	 }
}
0

Class.isInstance(Object), z zatem cos takiego (pseudokod):

public metoda(A a, Class<?> k) {
if (k.isInstance(a)) {
// dupa
}
}

0

Rozwiazanie bakeraw2 jest o tyle kiepskie, ze nie jest to to samo co instanceof. Dla hierarchii klas: Object <- Number <- Integer:
Integer a = 17;

a.getClass() == Integer.class // true
a.getClass() == Number.class // false
a.getClass() == Object.class // false

Integer.class.isInstance(a) // true
Number.class.isInstance(a) // true
Object.class.isInstance(a) // true

Wiec jak widac roznica jest spora. Moze to byc wada jak i zaleta, to zalezy od danego przypadku. Jednak 'dynamiczny instanceof' to jest zdecydowanie Class.isInstance (nawet dokumentacja tej metody tak twierdzi).

0

Class.isInstance() ma ta wade ze nie obejmuje interfejsow, wiec nie jest dokladnym odpowiednikiem instanceof. Uzyj Class.isAssignableFrom()

1

Nie wiem o czym mowisz, ten kod dziala jak nalezy:

Class<CharSequence> c = CharSequence.class;
System.out.println(c.isInstance("dupa")); // prints true
System.out.println(c.isInstance(new StringBuilder())); // prints true

CharSequence jest interfejsem ktory implementuje m.in. klasa String, lub StringBuilder, CharArray itp. Czyli isInstance zdecydowanie wspiera interfejsy. Dokumentacja tej metody mowi nawet ze jest to 'dynamiczny instanceof'. Mozesz podac przyklad ktory pokazuje co Twoim zdaniem nie dziala?

1

Oczywiste brednie z mojej strony. Dzieki za zwrocenie uwagi. Roznica jest taka ze isAssignableFrom() dziala z prymitywami a isInstance() nie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1