2 回答
TA贡献1946条经验 获得超4个赞
以下代码(在类中包装/修改您的代码):
public class Main {
public static void main(String[] args) {
String item = "Hello, World!"
Thread t = new Thread(() -> printItem(item));
t.start();
}
public static void printItem(Object item) {
System.out.println(item);
}
}
在功能上等同于:
public class Main {
public static void main(String[] args) {
String item = "Hello, World!"
Thread t = new Thread(new Runnable() {
@Override
public void run() {
printItem(item);
}
});
t.start();
}
public static void printItem(Object item) {
System.out.println(item);
}
}
请注意,在第一个示例中,您必须使用 lambda ( ->)。但是,您将无法使用方法引用,因为该方法printItem与Runnable. 这将是非法的:
Thread t = new Thread(Main::printItem);
基本上,方法引用与以下内容相同:
new Runnable() {
@Override
public void run() {
printItem(); // wouldn't compile because the method has parameters
}
}
后面的表达式->,或-> {}块内的代码,与您在run()方法中放置的代码相同。
Runnable singleExpression = () -> /* this is the code inside run()*/;
Runnable codeBlock = () -> {
// this is the code inside run()
};
TA贡献1155条经验 获得超0个赞
您没有将参数传递给run()方法,它() ->是代表run()方法的部分。你在做什么只是将方法定义为:
@Override
public void run(){
printStudent(stud); //the value of stud from the context copied here
}
添加回答
举报