28 votos

El equivalente de la palabra clave de C# 'como' en Java

En Java, es posible intentar un molde y volver null si la conversión falla?

53voto

erickson Puntos 127945
public static <T> T as(Class<T> t, Object o) {
  return t.isInstance(o) ? t.cast(o) : null;
}

Uso:

MyType a = as(MyType.class, new MyType());   
// 'a' is not null

MyType b = as(MyType.class, "");   
// b is null

29voto

eugener Puntos 10531

Usted puede utilizar el instanceof de palabras clave para determinar si usted puede lanzar de forma correcta.

return obj instanceof String?(String)obj: null;

Por supuesto, se puede genericied, realizado en la función, pero creo que la pregunta era acerca de lo que significa Java tienen para lograr esto.

5voto

Kathy Van Stone Puntos 10310

Se puede, pero no con una única función en Java:

public B nullCast(Object a) {

  if (a instanceof B) {
     return (B) a;
  } else {
     return null;
  }
}

EDIT: tenga en cuenta que usted no puede hacer la clase B genérico (para este ejemplo) sin la adición de la clase de destino (esto tiene que ver con el hecho de que un tipo genérico no está disponible para instanceof):

public <V, T extends V> T cast(V obj, Class<T> cls) {
  if (cls.isInstance(obj)) {
    return cls.cast(obj);
  } else {
    return null;
  }
}

2voto

OscarRyz Puntos 82553
MyType e = ( MyType ) orNull( object, MyType.class );
// if "object" is not an instanceof MyType, then e will be null.

...

public static Object orNull( Object o , Class type ) { 
    return type.isIntance( o ) ? o : null;
}

Supongo que esto de alguna manera podría hacerse con los genéricos, pero también creo, pero probablemente no es lo que se necesita.

Este sencillo método recibe un Objeto y devuelve el Objeto porque el reparto se realiza en el método de cliente.

0voto

Peter Puntos 4694

AFAIK, esta sería una de las maneras de hacerlo:

SomeClassToCastTo object = null;
try {
  SomeClassToCastTo object = SomeClassToCastTo.class.cast(anotherObject);
}
catch (ClassCastException e) {
  object = null;
}

Feo, pero debe hacer lo que quieras...

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X