Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 理解静态方法的调用_Java - Fatal编程技术网

Java 理解静态方法的调用

Java 理解静态方法的调用,java,Java,我得到了这段代码,我想知道为什么方法task1被称为Exam.task1。我尝试将呼叫改为task1,一切正常。我知道静态方法必须从类中调用,但为什么在这个示例中代码没有这种调用就可以工作呢 import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.function.Cons

我得到了这段代码,我想知道为什么方法task1被称为Exam.task1。我尝试将呼叫改为task1,一切正常。我知道静态方法必须从类中调用,但为什么在这个示例中代码没有这种调用就可以工作呢

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Predicate;


public class Exam {

    public static <T> void task1(Iterable<T> collection,Predicate<T> filter,Consumer<T> action){
        Set<T> set = new HashSet<>();
        for(T data : collection){
            if(filter.test(data) && set.add(data)){
                action.accept(data);
            }
        }
    }

    public static void main(String[] args) {
        List<String> list = Arrays.asList("c","d","a","a","de","e","gt","d","f","e");
        List<String> dest = new ArrayList<>();

        Exam.task1(list,str -> str.length() == 1, str -> dest.add(str)); 

        for(String s : dest){
            System.out.format("%s ",s);
        }
    }
}
import java.util.ArrayList;
导入java.util.array;
导入java.util.HashSet;
导入java.util.List;
导入java.util.Set;
导入java.util.function.Consumer;
导入java.util.function.Predicate;
公开课考试{
公共静态void task1(Iterable集合、谓词筛选器、使用者操作){
Set=newhashset();
对于(T数据:收集){
if(过滤测试(数据)和设置添加(数据)){
行动.接受(数据);
}
}
}
公共静态void main(字符串[]args){
列表=数组。asList(“c”、“d”、“a”、“a”、“de”、“e”、“gt”、“d”、“f”、“e”);
List dest=new ArrayList();
任务1(列表,str->str.length()==1,str->dest.add(str));
for(字符串s:dest){
系统输出格式(“%s”,s);
}
}
}

因为
main
是一个
static
方法,并且您在同一个类中,所以
test.task1
是隐式的

是的,它类似于
this
在方法中是隐式的,因此如果一个类有字段
x
,那么您不需要键入
this.x
在方法中引用它。@DavidS除非
x
恰好也是一个局部变量请仔细阅读以下答案:。