Als we het datatype van de variabele in javascript willen controleren, kunnen we de operator typeof
gebruiken.
Beschouw dit fragment
var c = 'str' ;
console.log(typeof(c)); // string
c = 123 ;
console.log(typeof(c)); // number
c = {} ;
console.log(typeof(c)) ; // object
Ik wil dezelfde functionaliteit bereiken in java 8
. Java heeft geen operator typeof, maar er is de operator instanceof
om de typen te controleren.
System.out.println("str" instanceof String); // true
Integer a = 12 ;
System.out.println(a instanceof Integer);
Float f = 12.3f
System.out.println(f instanceof Float); // true
Kunnen we het nog beter doen? Bovendien ondersteunt instanceof
geen primitieve typen.
Is er een benadering in java 8
? Alle relevante benaderingen worden op prijs gesteld.
Antwoord 1, autoriteit 100%
U kunt de getClass()
methode om het type object te krijgen dat u gebruikt:
Object obj = null;
obj = new ArrayList<String>();
System.out.println(obj.getClass());
obj = "dummy";
System.out.println(obj.getClass());
obj = 4;
System.out.println(obj.getClass());
Dit genereert de volgende uitvoer:
class java.util.ArrayList
class java.lang.String
class java.lang.Integer
Zoals je ziet, wordt het type object weergegeven waarnaar wordt verwezen door de variabele, wat mogelijk niet hetzelfde is als het type van de variabele (Object
in dit geval).
Voor primitieve typen is er geen oplossing omdat het probleem van het kennen van het type dat in een variabele is opgeslagen niet bestaat. Een variabele van het primitieve type kan alleenwaarden van dat type bevatten. Omdat je de variabele (of parameter) ergens moet definiëren, weet je al het type ervan en de waarden die het kan bevatten. Er is geen “basis”-type voor primitieve waarden die u kunt gebruiken, vergelijkbaar met het type Object
, dat het basistype is voor alle objecten in Java.
Antwoord 2, autoriteit 30%
Met dank aan @Progman voor de methode getClass()
.
class check{
static Class typeof(Integer a)
{
return a.getClass();
}
static Class typeof(Character c)
{
return c.getClass();
}
static Class typeof(Float f)
{
return f.getClass();
}
static Class typeof(Double d)
{
return d.getClass();
}
static Class typeof(Long l)
{
return l.getClass();
}
static Class typeof(String s)
{
return s.getClass();
}
}
Dus nu controleren we zowel primitieve als niet-primitieve typen
check.typeof(12) ; // class java.lang.Integer
check.typeof(12.23f) ; // class java.lang.Float
check.typeof('c') ; // class java.lang.Character
check.typeof("str") ; // class java.lang.String