Java 如何处理实例化类对象时发生的异常
你好 我正在初始化构造函数中的类方法。但是,Java 如何处理实例化类对象时发生的异常,java,Java,你好 我正在初始化构造函数中的类方法。但是,新URL(uploadUrl)将在构造函数中引发异常。因此,如果发生这种情况,用户应该无法继续。由于构造函数不能返回任何内容,我想知道处理这个问题的最佳方法是什么 非常感谢您的建议 java version "1.7.0_45" 公共类多路传输{ private static final String TAG=multipartity.class.getSimpleName(); 私有DataOutputStream DataOutputStream
新URL(uploadUrl)
将在构造函数中引发异常。因此,如果发生这种情况,用户应该无法继续。由于构造函数不能返回任何内容,我想知道处理这个问题的最佳方法是什么
非常感谢您的建议
java version "1.7.0_45"
公共类多路传输{
private static final String TAG=multipartity.class.getSimpleName();
私有DataOutputStream DataOutputStream;
私有文件输入流文件输入流;
私有HttpURLConnection HttpURLConnection;
私有URL;
公共多路传输(最终字符串上传URL){
dataOutputStream=null;
fileInputStream=null;
httpURLConnection=null;
试一试{
url=新url(上传url);
}捕获(格式错误){
Log.wtf(标记,e.getMessage());/*
由于构造函数不能返回任何内容,我想知道处理这个问题的最佳方法是什么
通常,允许异常传播到调用方,可以直接传播,也可以将其包装到您自己的更高级别抽象异常中(在您的情况下,直接允许它看起来更合适)
由于没有URL,您的实例就没有用处,因此构建失败是有意义的
或者,如果您想将其记录在构造函数中(但如果它正在传播,则调用方通常会处理任何适当的日志记录):
//记录日志并重新抛出,但可能不建议这样做
公共MultipleFileTransfer(最终字符串上载URL)引发畸形的异常{
// -------------------------------------------------^
dataOutputStream=null;
fileInputStream=null;
httpURLConnection=null;
试一试{
url=新url(上传url);
}捕获(格式错误){
Log.wtf(标记,例如getMessage());
抛出e;//我可以想出两种体面的方法来处理这种情况:
(1) 让构造函数引发一个异常。在记录后重新引发相同的异常,或者引发不同的异常。如果它引发的异常不是RuntimeException
(并且MalformedURLException
不是RuntimeException
),则需要向构造函数添加throws
子句
(2) 无论如何,让构造函数创建一个对象,但将其标记为无法使用的“无效”对象。我将添加一个isValid()
或isInvalid()
方法,以便调用方可以查询它是否有效。如果对无效对象调用其他方法,则应抛出IllegalStateException
我不认为其中一个明显优于另一个。这取决于偏好,也许还取决于程序其余部分的设计。如果对象的URL被破坏,该对象是否应该继续存在?@Crowder,谢谢你的第一个建议。
public class MultipleFileTransfer {
private static final String TAG = MultipartUtility.class.getSimpleName();
private DataOutputStream dataOutputStream;
private FileInputStream fileInputStream;
private HttpURLConnection httpURLConnection;
private URL url;
public MultipleFileTransfer(final String uploadUrl) {
dataOutputStream = null;
fileInputStream = null;
httpURLConnection = null;
try {
url = new URL(uploadUrl);
} catch (MalformedURLException e) {
Log.wtf(TAG, e.getMessage()); /* <-- How to handle a failure */
}
}
/* Factory method that initializes the class methods and returns the class object */
public static MultipleFileTransfer getInstance(final String uploadUrl) {
/* Check that a valid url has been entered correctly */
if(!URLUtil.isValidUrl(uploadUrl)) {
Log.wtf(TAG, "Invalid url: " + uploadUrl);
return null;
}
return new MultipleFileTransfer(uploadUrl);
}
}
public MultipleFileTransfer(final String uploadUrl) throws MalformedURLException {
// -------------------------------------------------^
dataOutputStream = null;
fileInputStream = null;
httpURLConnection = null;
url = new URL(uploadUrl);
}
// Logging and re-throwing, but probably not recommended
public MultipleFileTransfer(final String uploadUrl) throws MalformedURLException {
// -------------------------------------------------^
dataOutputStream = null;
fileInputStream = null;
httpURLConnection = null;
try {
url = new URL(uploadUrl);
} catch (MalformedURLException e) {
Log.wtf(TAG, e.getMessage());
throw e; // <== Rethrowing
}
}