Java变量前缀'm'和'p'的含义

3
这个语法的目的和含义是什么?我看到了像 private Object mSelectedOperationRow;mMessageService = pMessageService; 这样的代码。 完整的代码如下。
public class SearchResponseBean extends BaseBean implements Serializable,
    SearchResponse {

@Autowired
private SearchLifecycleService mSearchLifecycleService;

@Autowired
private ConfigurationServiceImpl mConfig;

@Value("#{sessionBean}")
private Session session;

@Value("#{searchRequestBean}")
private SearchRequest searchRequest;

@Value("#{searchResponseFilterByBean}")
private SearchResponseFilterBy searchResponseFilterBy;

@Value("#{searchHistoryBean}")
private HistoryBean<SearchHistoryItem> historyBean;

@Autowired
private SearchResponseDataModelFactory mSearchResponseDataModelFactory;

private int mCount;
private DataModel mDataModel;
private SearchPerspective mSearchPerspective;
private Operation mSelectedOperation;
private Object mSelectedOperationRow;
private List mSelectedList;
private List<String> mAvailableOperations;
private List mFilteredList;
private boolean mRelatedDocSearch;

private transient MessageService mMessageService;

public SearchResponseBean() {
    mMessageService = new MessageServiceImpl();
}

public SearchResponseBean(MessageService pMessageService) {
    mMessageService = pMessageService;
}

protected void init() {
    String THIS_METHOD_NAME = "init";
    mFilteredList = null;
    mSelectedList = null;
    mSelectedOperationRow = null;
    mSelectedOperation = null;
    mCount = -1;
    mDataModel = null;
    mSearchPerspective = null;
    mAvailableOperations = null;
    mRelatedDocSearch = false;
    logger.debug(getClass(), THIS_METHOD_NAME,
            "Initialized with null/defaults. ");
}

7
我的眼睛...它使用了匈牙利命名法,其中 m 表示成员变量,p 表示参数(我猜测如此)。 - assylias
变量名只是变量名,没有什么特别的。 - user2717954
1
这是一种编码规范(众多规范之一),用于区分参数(pXXXX)和成员变量(mXXXX)。如今不太流行。 - Gyro Gearless
4个回答

10

这不是语法问题,而是项目指南问题。有些项目对变量、成员、参数等都有命名约定。

  • m简单地代表成员(member)
  • p代表参数(parameter)

这样命名的目的是为了更容易区分局部变量、成员和方法参数。


8

mp前缀并不是Java语法的一部分,它们只是一些项目中使用的约定。 m代表"成员变量",p代表"参数"。这样,在阅读长代码块时,清楚每个变量来自何处及其含义。现代IDE会对成员变量使用不同的颜色,因此这种约定可能没有以前那么有用,但仍在某些项目中使用。


1
+1 最后一句话真的应该被强调。任何一个像样的Java IDE都允许使用不同的格式来处理字段、局部变量和参数,因此“识别变量来自哪里”的论点已经不再有效。由于变量前缀在Java代码中已经是相当不常见的约定,你甚至可能会让阅读你代码的人感到困惑(正如这个问题所展示的)。 - TheOperator

3

这是匈牙利命名法的一个例子,这种命名约定在Java代码中现在很少使用。


2

这些只是命名约定。

  1. 通常,'mXYZ' 用于类的成员变量。
  2. 而 'pXYZ' 则用于方法的参数。

我认为这些只是 C++ 世界或早期 Java IDE 的遗留问题,在那个时候,很难查看变量的格式并确定它是局部变量还是类级别的变量。如今,使用 'm' 和 'p' 前缀在我看来已经是多余的,因为现代 IDE 已经非常方便了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接