• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak sprawdzić czy typ klasy A jest taki sam jak typ klasy B

Object Storage Arubacloud
0 głosów
234 wizyt
pytanie zadane 18 sierpnia 2020 w Java przez amtrax Dyskutant (9,630 p.)

Cześć, 

na potrzeby pewnego zadania musiałem utworzyć własną klasę, która implementuje kolejkę. Jest to klasa generyczna. 

public class Queue <Item extends Comparable> implements Iterable<Item> {

	private Node <Item> first; 
	private Node <Item> last;
	
	[.......]	
}

 Na potrzeby również tego samego zadania musiałem utworzyć kolejną klase, która scala te dwie w jedną. 

public class QueueSort  {

	public static Queue sort(Queue  a, Queue b )
	{
	Queue c = new Queue(); 
	merge(a, b, c);
	return c;
	}
	
	
	[.....]
	

}

Teraz pytanie, jak sprawdzić w metodzie sort czy typ klasy A jest taki sam jak typ klasy B?

Dodam, że klasa musi być statyczna ze względu na treść polecenia. 

 

PS

dlaczego kompilator wyrzuca ostrzeżenia jeżeli nie dodam do, m.in, listy parametrów w nawiasach <> typu kolejek? 

private static void merge(Queue a, Queue b, Queue c)

Albo tutaj: 

Queue c = new Queue(); 

Czy tutaj:

public class Queue <Item extends Comparable> implements Iterable 

Czy coś mogę zmodyfikować aby kod był bardziej poprawny czy "bezpieczny" ? 

1 odpowiedź

0 głosów
odpowiedź 18 sierpnia 2020 przez Wiciorny Ekspert (269,590 p.)

Dlatego wyrzuca, gdyż w Javie ustanowiono, ze nie powinno się stosować typów surowych ... dlatego powstał typy  GENERYCZNE. 
Jeśli chcesz srpawdzić czy TYP A JEST TAKI JAK TYP B uzyj " instance of " ... jeśli equals nie zaimplementowałeś wedle swoich kryterii a typy te są tworzone przez Ciebie 
https://devcave.pl/effective-java/nie-uzywaj-surowych-typow  ->> info typy surowe 

instanceof keyword is a binary operator used to test if an object (instance) is a subtype of a given Type.

 

interface Domestic {}
class Animal {}
class Dog extends Animal implements Domestic {}
class Cat extends Animal implements Domestic {}


dog instanceof Domestic // true - Dog implements Domestic
dog instanceof Animal   // true - Dog extends Animal
dog instanceof Dog      // true - Dog is Dog
dog instanceof Object   // true - Object is the parent type of all objects

animal instanceof Dog // false

https://www.javatpoint.com/downcasting-with-instanceof-operator

 

komentarz 18 sierpnia 2020 przez amtrax Dyskutant (9,630 p.)

Dziękuje za odpowiedź,

Załóżmy że:

 Queue<Integer> a = new Queue<Integer>();
​​​​​​​ Queue<String> b = new Queue<String>();

Jak można sprawdzić czy te kolejki przechowują ten sam typ danych? Czy jedyny sposób to nawiasy <> w liście parametrów metody?

private static void merge(Queue <Item>a, Queue <Item> b, Queue <Item> c)

 

komentarz 18 sierpnia 2020 przez Wiciorny Ekspert (269,590 p.)

możesz skorzystać i zaimplementować własną metode opierająć się o coś takiego 

boolean sameType= a.getClass() == b.getClass();

ale jeszcze jest coś takiego jak już masz obiekt 
 

getClass returns "The Class object that represents the runtime class of this object."

getType returns "a Class object identifying the declared type of the field represented by this object"

 

komentarz 20 sierpnia 2020 przez amtrax Dyskutant (9,630 p.)
edycja 20 sierpnia 2020 przez amtrax

@Wiciorny,

Jeżeli uniknąłem użycia typów surowych w statycznej metodzie, jak mogę rozwiązać problem aby kompilator nie wyrzucał mi błędu "Cannot make static reference to non-static type". 

public  class QueueSort <Item extends Comparable <Item>> {

	public static  Queue  <Item> sort(Queue <Item> a, Queue <Item> b )
	{
	Queue <Item> c = new Queue <Item>(); 
	merge(a, b, c);
	return c;
	}
[....]

 

Podobne pytania

0 głosów
1 odpowiedź 1,327 wizyt
pytanie zadane 26 grudnia 2015 w C i C++ przez Pac Plus Mądrala (5,560 p.)
0 głosów
5 odpowiedzi 391 wizyt
pytanie zadane 4 października 2015 w C i C++ przez 0xf Dyskutant (8,180 p.)
+1 głos
2 odpowiedzi 633 wizyt
pytanie zadane 30 października 2015 w C i C++ przez macik1423 Początkujący (480 p.)

92,547 zapytań

141,390 odpowiedzi

319,509 komentarzy

61,931 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...