Is there any keyword in Java which is similar to t

2019-03-23 09:18发布

问题:

This question already has an answer here:

  • How to emulate C# as-operator in Java 6 answers

As we know C# provides an AS keyword which automatically performs a check whether the Object is of a type and if it is, it then casts it to the needed type else gives a null.

public class User

{

}

....

Object obj = someObj;

User user = obj As User;

...

Here in the above example, An Object obj can be of type User or some other type. The user will either get an object of type User or a null. This is because the As keyword of C# first performs a check and if possible then performs a casting of the object to the resulting type.

So is there any keyword in Java which is equivalent to the AS keyword of C#?

回答1:

You can create a helper method

public static T as(Object o, Class<T> tClass) {
     return tClass.isInstance(o) ? (T) o : null;
}

User user = as(obj, User.class);


回答2:

no, you can check with instanceof and then cast if it matches

User user = null;
if(obj instanceof User) {
  user = (User) obj;
}


回答3:

No keyword, but for completeness I'll give you the 1-liner equivalent:

User user = obj instanceof User ? (User) obj : null;

(You might not have to have the explicit cast, I'm not sure.)