2014-07-21 20 views
5

Để tham khảo các biến Ví dụ, tôi nên sử dụng "này" từ khóa ...Java: tôi có nên sử dụng từ khóa "this" hoặc "m_" không?

class Foo 
{ 
    private int bar; 

    public Foo(int bar) 
    { 
    this.bar = bar; 
    } 
} 

HOẶC "m_" tiền tố (quy ước đặt tên Hungary nơi m có nghĩa là "biến thành") ...

class Foo 
{ 
    private int m_bar; 

    public Foo(int bar) 
    { 
    m_bar = bar; 
    } 
} 

Có bất kỳ tình huống nào mà một trong những cung cấp lợi thế hơn cách khác không?

+4

Bạn nên sử dụng 'this', vì nó thực sự là kiểu Java và cú pháp Java. –

+1

Có hai câu hỏi * khác nhau * đang diễn ra ở đây - cả hai đều chủ quan. 1) Tôi không sử dụng 'm_', 2) tôi sử dụng' this' khi nào và chỉ khi nào nó được yêu cầu. – user2864740

+0

@ user2864740 OP dường như đang đề xuất sử dụng "m_" khi 'this' sẽ được yêu cầu. Tôi tin rằng sự đồng thuận cho đến nay là không làm điều đó. –

Trả lời

9

this là tiêu chuẩn, dễ đọc hơn và ít bị lỗi hơn.

Nó sẽ giúp bạn khi bạn nhầm lẫn che giấu các biến hoặc cố gắng truy cập trường không tĩnh trong mã tĩnh.

tức là để tránh

int m_bar; 
public Foo(int m_bar) 
{ 
    m_bar = m_bar; 
} 

và tĩnh int m_bar này;

int m_bar; 
public Foo(int bar) 
{ 
    this.bar = m_bar; // a warning static field being accessed as non-static 
} 
+1

Tôi không đồng ý - nhưng đó là câu hỏi/câu trả lời chủ quan.I * only * sử dụng 'this' ở nơi nó được yêu cầu (và' m_' không hề). IDE của tôi (đi JetBrains!) Cho tôi biết khi nào "sai". – user2864740

+0

bạn không nên ở lại phụ thuộc vào bảo vệ lỗi của IDE –

+1

Tôi đồng ý với câu trả lời này là ví dụ được đưa ra bởi người sử dụng là một trường hợp rõ ràng, nơi cần định hướng. "m_" không tuân theo tiêu chuẩn chung của tên biến lạc đà và "điều này" là tiêu chuẩn chung được sử dụng. –

2

Sử dụng this. Đó là cú pháp Java được cung cấp cho chính xác cách sử dụng này và các nhà phát triển đã quen thuộc với nó và giúp giảm các lỗi cú pháp trong một số trường hợp góc.

Một vấn đề có thể xảy ra với tiền tố tên trường trong Java là các công cụ tạo getters và setters cũng không hoạt động. Ngoài ra, một số công cụ Java Bean như Jackson hoặc GSON bây giờ sẽ yêu cầu ánh xạ để ánh xạ tên trường đối tượng của bạn. Cuối cùng, vì nó không theo phong cách Java hoặc quy ước, maintenance developer sẽ không được hài lòng.

Các vấn đề liên quan