ja próbuje zrobić równowartośćUstal, czy dwa obiekty Java są tej samej klasy
if (object1.class == object2.class)
{
//do something
}
co oczywiście nie działa, co mam metoda widokiem?
ja próbuje zrobić równowartośćUstal, czy dwa obiekty Java są tej samej klasy
if (object1.class == object2.class)
{
//do something
}
co oczywiście nie działa, co mam metoda widokiem?
Jeśli są z dokładnym samej klasy:
boolean result = object1.getClass().equals(object2.getClass());
Teraz, jeśli są one zgodne klas (jeśli jest klasy zstępującej do drugiego) :
HashMap<String,Object> hashMap = new HashMap<String,Object>();
LinkedHashMap<String,Object> linkedHashMap = new LinkedHashMap<String,Object>();
boolean result = hashMap.getClass().isAssignableFrom(linkedHashMap.getClass());
Jak LinkedHashMap jest podklasą HashMap to wynik zmienna będzie prawdą, więc może to być dla ciebie lepsze, ponieważ znajdzie dokładnie i podklasę.
Ponadto, należy unikać „.class” o zmienne, ponieważ może to nie daje prawidłowy wynik, na przykład:
Object someText = "text value";
System.out.println(someText.class.getName()); //this will print java.lang.Object and not java.lang.String
Kiedy używasz „.class” jesteś acessing zmienna właściwość statyczna, a nie klasa samego obiektu.
Brakuje metodę getClass()
,
if (object1.getClass().equals(object2.getClass()))
{
// do something
}
object1.getClass() == object2.getClass()
Użyj słowa kluczowego instanceof –
Żadne wystąpienie instanceof nie wymaga następującego podpisu: instancja instanceof ClassName i ClassName muszą być znane podczas kompilacji. Używanie getClass() pozwala na oczekiwanie, aż środowisko wykonawcze pozna klasę. Jest możliwe, że OP mógłby zamienić się na użycie instanceof, ale nie na informacje zawarte w pytaniu. Istnieją również inne różnice dotyczące polimorfizmu. – chubbsondubs
Można to wykorzystać:
if (object1.getClass().equals(object2.getClass())) {
//do something
}
trzeba użyć metody getClass()
.
try:
if(object1.getClass() == object2.getClass())
//do something
Szukacie sposobu getClass
, określonym w java.lang.Class
.
(Źródło: http://download.oracle.com/javase/7/docs/api/java/lang/Class.html)
Wow, to pytanie zostało dość szybko poskromione. – Jetbeard
Dziękujemy za informacje dotyczące porównywania wartości skrótu. To więcej niż chciałem zrobić dla tego konkretnego problemu, ale kompletność jest doceniana. – ToothlessRebel
Dlaczego po prostu nie użyłbyś object1 objectof object2? – JPM
** instanceof ** pobiera odwołanie do obiektu po lewej stronie i literałem nazwy klasy po prawej stronie, nie można go używać w sposób, w jaki mówisz. –