有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中使用this是一种不好的做法吗?

我只是好奇this的用法,因为Android的示例代码和文档没有使用this关键字(我喜欢相信Android工程师通常都很聪明,因此我把他们作为基础)。我只是好奇安卓工程师不怎么使用this的根本原因


共 (6) 个答案

  1. # 1 楼答案

    你怎么会这么认为?例如SDK coding style guide没有提到这一点,我在很多地方都看到了这一点。然而,遵循变量命名指南通常是不必要的,可以省略,通常情况下就是这样

    当引用一个实例时,使用this关键字是为了清晰起见,但是正如文档中提到的,没有真正强制的样式,遵循命名规则就没有必要了

    例如,一个完全有效的setter在命名之后,无论有没有这个,都可能是

     private int mCounter;
       public void setCounter(int counter) {
          mCounter = counter
       }
    
     private int increment;
     public void setIncrement(int increment) {
         this.increment = increment
     }
    

    注意,在第一个例子中,你可以,但不必使用这个。在第二种情况下你必须这样做,而第一种情况可能更接近于风格指南

  2. # 2 楼答案

    这主要是风格上的差异。我还没有看到关于它的好坏原因的争论。就我个人而言,我喜欢使用它,在一些情况下,你需要使用它

    例如,如果你有一个匿名的内部类,想要调用父类的方法,你需要this。例如:

    class MyClass{
        protected void doSomething(){
    
        }
    
        OnClickListener n = new OnClickListener(){
            public void onClick(View v){
                MyClass.this.doSomething();
            }
        };
    
    }
    

    使用this的另一个原因是如果方法参数屏蔽了成员变量。在这种情况下,您可以使用this来区分这两个参数,尽管我建议您将参数重命名为非屏蔽参数

    class MyClass{
        protected int val;
    
        public void setVal(int val){
            this.val = val; // set the member variable equal to the method argument
        }
    
    }
    

    使用this的另一个原因是从当前类实例中传递指向该实例的指针。例如,当您创建一个新的Intent

    Intent i = new Intent(this, NewActivity.class);
    

    可能还有更多地方需要使用this。这些是最先想到的几个

  3. # 3 楼答案

    使用this更像是一种安全措施:

    class MyClass{
        void doSomething() { 
        }
    
        OnClickListener n = new OnClickListener() {
            void doSomething() {
            }
    
            public void onClick(View v){
                MyClass.this.doSomething(); // MyClass#doSomething()
                this.doSomething(); // OnClickListener#doSomething()
    
                doSomething(); // OnClickListener#doSomething() if present,
                               // MyClass#doSomething() otherwise - danger!
            }
        }; 
    }
    

    由于在某些情况下,您无法控制成员或方法的存在(例如,当OnClickListener是第三方类时),为了获得可预测的行为,您应该始终限定此类引用。除非变量行为正是你想要的

  4. # 4 楼答案

    不,不是这样,android的示例代码中提到了“this”,但没有理由认为这是一种不好的做法。然而,很多时候这是不必要的,为了简洁起见,它可能被省略了

    例如,从定义的类中调用methodA()可以这样调用。方法a()。在这种情况下这是不必要的,因为这是在你打电话时暗示的。它通常用于参数名与设置的变量名相同的setter中

    public void setName(String name) {
       this.name = name;
    }
    
  5. # 5 楼答案

    这更多的是个人品味,而不是糟糕的做法

  6. # 6 楼答案

    这没关系,但如果你在代码中使用“this”,确保你在任何地方都使用它。这让你的代码更清晰