在下面的代码中,两个方法使用相同的名称命名,结果是什么?
还有一个问题,如何减少代码量?
public String getFileName(Uri uri) {
String fileName = null;
String scheme = uri.getScheme();
if (scheme == null)
return null;
if (scheme.equals("file")) {
return uri.getLastPathSegment();
} else if (scheme.equals("content")) {
Cursor cursor = mContext.getContentResolver().query(uri, null, null, null, null);
if (cursor != null) {
if (cursor.getCount() != 0) {
int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DISPLAY_NAME);
cursor.moveToFirst();
fileName = cursor.getString(columnIndex);
}
cursor.close();
}
}
return fileName;
}
public static String getFileName(String path) {
if (path == null)
return null;
int index = path.lastIndexOf(PATH_SEPERATOR);
return index < path.length() ? path.substring(index + 1) : null;
}
答案 0 :(得分:1)
您在谈论方法,对吧?
因此,您在此处使用方法重载。只要您不对大量的重载方法感到困惑,就不会有任何后果。
方法重载是一项功能,如果一个类的参数列表不同,则它允许一个类拥有多个具有相同名称的方法。它类似于构造函数重载,它允许一个类具有一个以上具有不同参数列表的构造函数。
答案 1 :(得分:0)
正如Vitaly解释的那样,您正在那里重载方法。很好,因为两种方法的signature不同。
方法的签名由其name
和其parameter types
定义。
在您的示例中,您有
getFileName(Uri)
和
getFileName(String)
因此,编译器可以根据您提供的参数告诉您实际要调用的方法。