2011-06-02 30 views
17

Como sabemos, C# proporciona una palabra clave AS que realiza automáticamente una comprobación de si el objeto es de un tipo y si lo es, lo arroja a el tipo necesario else da un nulo.¿Hay alguna palabra clave en Java que sea similar a la palabra clave 'AS' de C#

public class User

{

}

....

Object obj = someObj;

User user = obj As User;

...

Aquí, en el ejemplo anterior, Un objeto obj puede ser de tipo de usuario o algún otro tipo. El usuario obtendrá un objeto de tipo Usuario o un nulo. Esto se debe a que la palabra clave As de C# primero realiza una comprobación y, si es posible, realiza una conversión del objeto al tipo resultante.

¿Hay alguna palabra clave en Java que sea equivalente a la palabra clave AS de C#?

+0

Buena pregunta, aunque creo que "como" es un patrón realmente horrendo - Preferiría usar un yeso y obtener una excepción (es decir, una falla ruidosa que puede solucionar) en lugar de una conversión silenciosa a nulo que puede morderlo en algún momento aleatorio en el futuro ... y si realmente no sabe si el yeso va a funcionar o no, usted todavía ¡hay que probar null más tarde para que no hayas guardado ningún tipeo! – mikera

+2

Aún puedes lanzarlo como el lanzamiento de Java. "como" es una elección deliberada del desarrollador que dice "No quiero esa excepción de conversión, si no es del tipo correcto, quiero nula" – Hounshell

Respuesta

23

Puede crear un método de ayuda

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

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

Lo más pequeño - es la instancia en lugar de isInstanceOf –

+0

@Jeff, gracias. –

+0

Gracias Peter ... Lo intentaré a tu manera. –

20

no, se puede comprobar con instanceof y luego fundido si coincide con

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

Creo que quiere decir 'x instancia de Usuario', ¿no? – templatetypedef

+0

sí, lo arregló para que coincida con la pregunta – jberg

+3

Pero usar instanceof es como usar la palabra clave IS de C#. –

11

Sin palabras clave, pero para lo completo que podrás dar al 1 equivalente -liner:

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

(Es posible que no tienen que tener la conversión explícita, no estoy seguro).