Java 数组列表错误

Java Arraylist error

我正在写一个 java 小 class 我想知道这里到底发生了什么:

public void listFile(int index)
{
    if(validIndex(index)) {
        String filename = files.get(index);
        System.out.println(filename);
    }
}

然而,我写道:

public void listFile(int index)
{
     if files.validIndex(index){
         String filename = files.get(index);
         System.out.println(filename);
     }
     else {
         System.out.println("malo");
     }
 }

所以,勉强相等,除非:

我写了 — if files.validIndex(index){

示例说 — if validIndex(index){

为什么不显示 'files.'? 为什么对象不调用该方法,而是直接将方法放在那里。好像废话。

尝试下面的代码并确保 files 有方法 validIndex(int)files.validIndex(index) returns boolean.

public void listFile(int index){
   if (files.validIndex(index)){ // make sure files.validIndex(index) returns boolean
     String filename = files.get(index);
     System.out.println(filename);
   } else {
    System.out.println("malo");
   }
}

我假设 files 是一个 ArrayList(基于标题)。 ArrayList 没有 validIndex 方法,因此 if (files.validIndex(index)) 不起作用。

另一方面,您的代码所在的 class(您没有包含太多代码)可能包含一个 validIndex 方法,该方法检查传递的索引是否是有效索引在 files 列表中。

因此 if (validIndex(index)),与 if (this.validIndex(index)) 相同。

这里可能只是括号错误:

if (files.validIndex(index))
{...}  

我假设 validIndex(int i)listFiles(int i) 是同一个 class 中的 2 个方法。

当您在调用方法时未指定调用的对象,默认情况下,该方法将在当前对象上调用。所以 validIndex(i) 相当于调用 this.validIndex(i).

这是一种语法简化,允许不每次都写this

但在某些情况下使用 this 会很有用:

  • 访问与参数或局部变量同名的成员。
  • 在内部 class 及其父 class 之间共享相同名称的 2 个方法之间存在差异(您需要为 this 使用特殊语法)。

Class A {
  Class B{
    void bar(){
      foo(); // calling B foo
      A.this.foo(); // calling A foo
    }
    void foo(){}
  }
  int b;

  void foo(){}

  void do(int b){
    this.b = b; // assign the value of the parameter to the member b.
    foo(); // calling A foo
    (new B()).bar();
  }
}