IT Share you

Java- 'this'키워드를 사용하는 경우

shareyou 2020. 11. 7. 17:58
반응형

Java- 'this'키워드를 사용하는 경우


이 질문에 이미 답변이 있습니다.

thisJava 에서 키워드 를 사용하는 가장 좋은 방법은 무엇입니까 ? 예를 들어 다음과 같은 클래스가 있습니다.

class Foo {
    Bar bar;

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

괜찮습니다.하지만 Java는 생성자의 명령문을 다음과 같이 변경하면 무슨 일이 일어나고 있는지 알만큼 영리합니다.

 bar = bar;

그렇다면 this키워드를 사용하는 이유는 무엇입니까? (나는 어떤 상황에서 그것을 사용하는 것이 완전히 필요하다는 것을 깨닫고, 나는 단지 이와 같은 상황을 요구하고 있습니다). 사실 저는 가독성을 위해 키워드를 사용하는 경향이 있지만 일반적인 관행은 무엇입니까? 상점 전체에서 사용하면 코드가 약간 지저분 해 보입니다. 예를 들어

boolean baz;
int someIndex = 5;
this.baz = this.bar.getSomeNumber() == this.someBarArray[this.someIndex].getSomeNumber();

분명히 약간의 코드이지만 내 예를 보여줍니다. 이 경우 개인 취향에 달려 있습니까?


그러나 Java는 생성자의 명령문을 다음과 같이 변경하면 무슨 일이 일어나는지 알만큼 영리합니다.

  bar = bar;

그릇된! 컴파일은하지만 당신이 생각하는대로하지 않습니다!

사용시기에 관해서는 많은 것이 개인적인 취향입니다. this인터페이스가 발생하는 곳이고 내 것과 그렇지 않은 것을 주장하는 것이 좋기 때문에 불필요한 경우에도 공개 방법 을 사용하는 것을 좋아합니다 .

참고로 this.subject ;-)에 대한 Oracle의 Java Tutorials를 확인할 수 있습니다.

http://docs.oracle.com/javase/tutorial/java/javaOO/thiskey.html


필드와 이름이 같은 매개 변수가있을 때 사용해야합니다. 그렇지 않으면 문제가 발생합니다. 컴파일되지만 원하는 작업을 반드시 수행하지는 않습니다.

다른 모든 곳에서는 가독성을 위해 필요한 경우가 아니면 사용하지 마십시오. 어디서나 사용한다면 코드의 20 %가 'this'라는 단어로 구성됩니다!


사실은

baz = baz

이 경고를 올릴 것입니다

변수 baz에 대한 할당은 효과가 없습니다.

당신이 생각은 잘못된 것입니다 그래서 당신은, 그래서 로컬 범위는 클래스 속성을 무시 해야 사용하는 this클래스 속성에 변수를 할당하는 명시 적 키워드.

그렇지 않으면 할당에 포함 된 변수는 매개 변수로 전달 된 변수이며 클래스 1은 무시됩니다. 그것이 this유용하고, 가독성의 사실이 아니라, baz당신이 말하는 것을 명시 적으로 결정하는 사실입니다 .

내가 말할 것

사용 this하지 않으면 모호함 (또는 더 중요한 컴파일러 경고)이 발생할 때마다 사용하고 그렇지 않으면 그대로 두십시오. 그 목적은 기본 가정 (먼저 로컬을 확인한 다음 클래스 속성을 확인)이 충분하지 않을 때 모호성을 해결하는 것입니다.


this키워드는 어떤 메소드가 호출되는 클래스의 객체를 나타냅니다.
예를 들면 :

public class Xyz {  
    public Xyz(Abc ob)
    {
        ob.show();
    }
}

public class Abc {
    int a = 10;

    public Abc()
    {
        new Xyz(this);
    }

    public void show()
    {
        System.out.println("Value of a " + a);
    }

    public static void main(String s[])
    {
        new Abc();
    }
}

여기서 Abc()우리는 Xyz()Abc Class의 Object가 필요한 것을 호출 합니다. 그래서 thisnew 대신 전달할 수 있습니다. 여기에서 Abc()new를 전달하면 Abc()반복해서 자신을 호출하기 때문입니다.

또한 이것을 사용하여 클래스의 변수와 메소드의 지역 변수를 구분합니다. 예 :

class Abc {
    int a;

    void setValue(int a)
    {
        this.a = a;
    }
}

다음 this.a은 Abc 클래스의 변수 a를 나타냅니다. 따라서 new를 사용하는 것과 동일한 효과가 있습니다 Abc().a;.

따라서 this현재 클래스의 객체를 참조 한다고 말할 수 있습니다 .


명시 적 생성자 호출 에서이 키워드 를 사용하는 것이 일반적입니다. 입니다. 문서 에서 예제를 볼 수 있습니다 .

public class Rectangle {
    private int x, y;
    private int width, height;

    public Rectangle() {
        this(0, 0, 1, 1);
    }
    public Rectangle(int width, int height) {
        this(0, 0, width, height);
    }
    public Rectangle(int x, int y, int width, int height) {
        this.x = x;
        this.y = y;
        this.width = width;
        this.height = height;
    }
    ...
}

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

다음과 같지 않다

public Foo(Bar bar) {
     bar = bar;
}

두 번째 경우 범위의 막대는 매개 변수이므로 자체에 할당합니다. this.bar남아 있습니다 null.


그것은 개인적인 취향입니다-스타일을 선택하고 그것에 충실하십시오. 나는 개인적으로 사용 this하지만 다른 사람들은 그것이 중복이라고 생각합니다.


규칙에 따라 가독성을 위해 사용할 수 있습니다. 객체 변수라는 사실을 강조합니다.

또한 변수와 이름이 같은 setter 인수를 갖고 싶습니다 (메서드 서명에서 더 잘 보입니다). this이 경우 필요합니다 .


I always try to use this keyword on local class objects.

객체가 정적 객체인지 클래스 객체인지 시각적으로 상기시키는 데 사용합니다.

저와 컴파일러가 메서드 인수와 로컬 클래스 개체를 구분하는 데 도움이됩니다.

public void setValue(int value){
  this.value = value;
}

내부 / 중첩 / 익명 클래스에 이러한 로컬 개체가 있는지 여부를 시각적으로 상기시켜 클래스 개체를 캡슐화하는 것과 구별하는 데 도움이됩니다. this접두사 가 없으면 내 규칙은 캡슐화 클래스의 객체임을 상기시켜 줄 것입니다.

public class Hello{
  public int value = 0;
  public boolean modal = false;

  public class Hellee{
    public int value = 1;
    public getValue(){
      if (modal)
        return 0;
      return this.value;
    }
  }
}

void set(int real)
{
    this.real = real;
}

여기 this에 인스턴스 변수가있을 때 사용되는 키워드는 지역 변수와 동일합니다.
의 또 다른 용도 this는 생성자 오버로딩입니다. 오버로드 된 생성자에서 생성자를 호출 할 수 있습니다.


Personal preference, but I use it to solve ambiguities only, and I suppose in the very rare case to make it obvious that the assigned variable is a field. There are some projects where people use "this.field" on every single field reference. I find this practice visually distracting to the point of being obnoxious, but you should be prepared to see such code once in a while.

I secretly think there's a special place in hell for people who write 500 line classes that have 275 'this' keywords in them, but this style is found in some open source projects, so to each his own I guess.


Use it for Cloning objects (by passing reference of itself through a copy constructor).

Useful for object that inherits Cloneable.

public Foo implements Cloneable {
  private String bar;

  public Foo(Foo who) {
    bar = who.bar;
  }

  public Object getClone() {
    return new Foo(this);  //Return new copy of self.
  }
}

참고URL : https://stackoverflow.com/questions/2429062/java-when-to-use-this-keyword

반응형