我們的應用程序的Android部分有一些開發人員積極使用帶有「m *」的類成員變量的前綴。「mThis」的起源是什麼?
什麼是 「mThis」,這是基本的由來:
class SomeClass {
private final SomeClass mThis;
SomeClass() {
mthis = this;
}
}
和這個符號有什麼看法?
我們的應用程序的Android部分有一些開發人員積極使用帶有「m *」的類成員變量的前綴。「mThis」的起源是什麼?
什麼是 「mThis」,這是基本的由來:
class SomeClass {
private final SomeClass mThis;
SomeClass() {
mthis = this;
}
}
和這個符號有什麼看法?
其實我猜這個問題更多的是關於m-prefix,而不是將this
作爲你自己的領域。
所以,關於前綴,這是a coding convention used by android team:所有成員變量(又名字段)前綴爲「m」。基本上就是這樣。其他的android開發者可能會使用它,因爲他們瀏覽過android源代碼,並認爲它適合在自己的代碼中使用這個約定。
順便說一句,它在一般的java編程中並不常見,我相信常見的java編碼標準通常不鼓勵使用任何類型的前綴。
謝謝,我也想知道「m」代表什麼 – mihail
是的,這更多的是他們使用的約定。它是否與c有關? –
本文是關於Android項目源代碼的,那麼爲什麼開發人員在應用程序開發中使用相同的代碼約定? –
我認爲它很方便,當你需要傳遞一個內部類的實例引用,並且你不想使用「完全限定」這個。即SomeClass.this
。儘管如此,對我來說似乎是多餘的。
所有其他m-前綴的成員變量是什麼? –
This article suggests it comes from ancient habits peculiar to the Microsoft ecosystem - 但是,前綴的struct
小號成員與它包含在struct
的一些速記是從天老Ç習慣時標識符,所有標識符(包括結構成員的名字),不得不在前八個字符中是唯一的。與包含結構的名稱的簡寫版的前綴名稱是一種簡單的機制來確保唯一的名字:
struct inode {
int number;
struct device *dev;
}
struct file_descriptor {
int number;
struct inode *i;
}
在這種情況下,number
是重複的,非唯一,和麻煩。
的C較新版本做這一個非問題通過將struct
名到他們的命名空間,但這種習慣的某些部分一直延續:Linux內核,例如,填充:
struct iattr {
unsigned int ia_valid;
umode_t ia_mode;
uid_t ia_uid;
....
和
struct inode {
/* RCU path lookup touches following: */
umode_t i_mode;
uid_t i_uid;
gid_t i_gid;
const struct inode_operations *i_op;
struct super_block *i_sb;
...
其中超前ia_
和i_
來自struct iattr
和struct inode
- 這使得它稍微容易閱讀這樣的鏈條:
if (!IS_ERR(cookie) && path->dentry->d_inode->i_op->put_link)
path->dentry->d_inode->i_op->put_link(path->dentry, nd, cookie);
(真的。 fs/namei.c
,第821行和第822行在我的源代碼中。)
它避免了當您打算使用該對象的成員(其中m是short)變量時意外使用局部變量。
private String name;
private String mName;
public void setName(String name) {
name = name; //wrong, just set the parameter variable to itself
this.name = name; //ok, but has 'this.' which isn't a problem, but some people don't like it
mName = name; //simples
}
m表示成員變量,s表示靜態。這是一個常見的命名約定。但是和中微子一樣,我並沒有太多使用它。如果使用現代IDE,語法顏色編碼會爲您提供相同的信息(實際上更多,因爲無論原始編碼器是否遵循命名約定,它都可以工作)。
該代碼沒有多大意義;它的唯一好處(AFAIK)稍微簡化了從非靜態內部類訪問封閉類成員的語法。 –