Java异常抛出对象并从catch获取对象

nmk*_*nan 2 java

我想在获取异常并从catch获取时传递对象.我UserDataException从Exception扩展

throw new UserDataException("Media uploaded failed",mediaDO, dupkExp);
Run Code Online (Sandbox Code Playgroud)

mediaDO 是对象.

如果可能的话,mediaDocatch声明中获取此对象

catch (UserDataException uExp) {

    }
Run Code Online (Sandbox Code Playgroud)

UserdataException calss:

public class UserDataException extends Exception {

private static final String ERROR = "Database Transaction Error: ";
private static final String DKERROR = "Duplicate Key Error";

/**
 * 
 */
private static final long serialVersionUID = 6209976874559850953L;

/**
 * 
 */
public UserDataException(String message, Throwable throwable) {
    super(message, throwable);
}

public UserDataException(String message) {
    super(message);
}

/**
 * <code>UserDataException</code> thrown with message and throwable object
 * 
 * @param schdulerData
 * @param message
 * @param throwable
 */
public UserDataException(String message, SchedulerData schdulerData, final Throwable throwable) {

    super(ERROR + message, throwable);
}

/**
 * <code>UserDataException</code> thrown with message and throwable object
 * 
 * @param schdulerData
 * @param message
 * @param throwable
 */
public UserDataException(String message, MediaDO mediaDO, final Throwable throwable) {

    super(DKERROR + message, throwable);
}
Run Code Online (Sandbox Code Playgroud)

}

请尽可能帮助..

Era*_*ran 8

您必须在异常类中存储对该对象的引用,并使用getter来获取它:

private MediaDO mediaDO;

public UserDataException(String message, MediaDO mediaDO, final Throwable throwable) {
    super(DKERROR + message, throwable);
    this.mediaDO = mediaDO;
}

public MediaDO getMediaDO()
{
    return mediaDO;
}
Run Code Online (Sandbox Code Playgroud)

然后在catch块中:

catch (UserDataException uExp) {
    MediaDO mediaDO = uExp.getMediaDO();
    ...
}
Run Code Online (Sandbox Code Playgroud)

  • 有什么建议可以这样做或不这样做吗?我的意思是这样做是一个很好的做法,在抛出异常时传回大对象。 (3认同)