如何使用新方法在函数内部传递变量
How to Pass variables inside functions using new method
我的网络爬虫项目中有这段代码:
public static void main(String[] args) throws Exception {
String frontierUrl = "http://www.cnn.com";
//creates a new instance of class WebCrawler
WebCrawler webCrawler = new WebCrawler();
//Add the frontier url to the queue first
webCrawler.enque(new LinkNode(frontierUrl));
webCrawler.processQueue();
}
void enque(LinkNode link){
link.setEnqueTime(new Date());
QUEUE.add(link);
}
这是我的 LinkNode Class:
public class LinkNode implements Comparable<LinkNode>{
private String url;
public LinkNode(String url) {
this.url = url;
}
它工作正常,没有错误。我试图了解这条线是如何工作的:
webCrawler.enque(new LinkNode(frontierUrl));
所以我不想直接在其中传递变量 "frontierUrl",而是想更详细地编写这一行,例如使用 "new" 的语法形式 ..:[=14=]
abc a = new abc ( );
因为我是 java 中的新手,所以有没有办法更详细地编写这一行以便更好地理解它?或者这是传递它的正式方法 throw 函数 ?
new LinkNode(frontierUrl)
创建一个新的 LinkNode
对象。
webCrawler.enque(new LinkNode(frontierUrl));
将创建的 LinkNode
对象传递给 enque
方法。
因此
webCrawler.enque(new LinkNode(frontierUrl));
相当于
LinkNode link = new LinkNode(frontierUrl);
webCrawler.enque(link);
只是没有多余的命名变量。
为什么要这样做?在 LinkNode 构造函数中传递 frontierUrl 没有错。
但是你当然可以随时这样做
webCrawler.enque(新链接节点(新字符串(frontierUrl)));
但在这种情况下,您总是创建一个新的 String 对象,而不是从 String Literal 池中获取它
如果您不需要在主方法中创建下面的 LinkNode
对象,您的方法似乎绝对适合此示例。如果您只想将对象传递给方法,则无需为该对象设置变量。通过这种方式,将少量变量传递给 LinkNode
构造函数更易读。
是的,有一些方法。您需要了解 Constructors,这是一种在 Java.
中创建 类 的方法
现在你的代码只允许做:
LinkNode frl = new LinkNode(frontierUrl)
webCrawler.enque( frl ); //you are passing your LinkNode Instance
另一种方法是更改您的 LinkNode 构造函数和 url
变量范围:
public class LinkNode implements Comparable<LinkNode>{
public String url;
public LinkNode() {} // this is called default constructor and it is
// not needed at all
并使用如下代码:
LinkNode frl = new LinkNode()
frl.url = frontierUrl;
webCrawler.enque( frl ); //you are passing your LinkNode Instance
另一种方法是为您的 LinkNode url 变量创建一个 setter 方法,例如
public class LinkNode implements Comparable<LinkNode>{
private String url;
public LinkNode() {}
public void setUrl(String url){
this.url = url;
}
并将其用作
LinkNode frl = new LinkNode()
frl.setUrl( frontierUrl );
webCrawler.enque( frl ); //you are passing your LinkNode Instance
最后一种方法比第二种方法更好,因为它正在做 Encapsulation,这在 Java 上是一个很好的实践。
我的网络爬虫项目中有这段代码:
public static void main(String[] args) throws Exception {
String frontierUrl = "http://www.cnn.com";
//creates a new instance of class WebCrawler
WebCrawler webCrawler = new WebCrawler();
//Add the frontier url to the queue first
webCrawler.enque(new LinkNode(frontierUrl));
webCrawler.processQueue();
}
void enque(LinkNode link){
link.setEnqueTime(new Date());
QUEUE.add(link);
}
这是我的 LinkNode Class:
public class LinkNode implements Comparable<LinkNode>{
private String url;
public LinkNode(String url) {
this.url = url;
}
它工作正常,没有错误。我试图了解这条线是如何工作的:
webCrawler.enque(new LinkNode(frontierUrl));
所以我不想直接在其中传递变量 "frontierUrl",而是想更详细地编写这一行,例如使用 "new" 的语法形式 ..:[=14=]
abc a = new abc ( );
因为我是 java 中的新手,所以有没有办法更详细地编写这一行以便更好地理解它?或者这是传递它的正式方法 throw 函数 ?
new LinkNode(frontierUrl)
创建一个新的LinkNode
对象。webCrawler.enque(new LinkNode(frontierUrl));
将创建的LinkNode
对象传递给enque
方法。
因此
webCrawler.enque(new LinkNode(frontierUrl));
相当于
LinkNode link = new LinkNode(frontierUrl);
webCrawler.enque(link);
只是没有多余的命名变量。
为什么要这样做?在 LinkNode 构造函数中传递 frontierUrl 没有错。
但是你当然可以随时这样做 webCrawler.enque(新链接节点(新字符串(frontierUrl)));
但在这种情况下,您总是创建一个新的 String 对象,而不是从 String Literal 池中获取它
如果您不需要在主方法中创建下面的 LinkNode
对象,您的方法似乎绝对适合此示例。如果您只想将对象传递给方法,则无需为该对象设置变量。通过这种方式,将少量变量传递给 LinkNode
构造函数更易读。
是的,有一些方法。您需要了解 Constructors,这是一种在 Java.
中创建 类 的方法现在你的代码只允许做:
LinkNode frl = new LinkNode(frontierUrl)
webCrawler.enque( frl ); //you are passing your LinkNode Instance
另一种方法是更改您的 LinkNode 构造函数和 url
变量范围:
public class LinkNode implements Comparable<LinkNode>{
public String url;
public LinkNode() {} // this is called default constructor and it is
// not needed at all
并使用如下代码:
LinkNode frl = new LinkNode()
frl.url = frontierUrl;
webCrawler.enque( frl ); //you are passing your LinkNode Instance
另一种方法是为您的 LinkNode url 变量创建一个 setter 方法,例如
public class LinkNode implements Comparable<LinkNode>{
private String url;
public LinkNode() {}
public void setUrl(String url){
this.url = url;
}
并将其用作
LinkNode frl = new LinkNode()
frl.setUrl( frontierUrl );
webCrawler.enque( frl ); //you are passing your LinkNode Instance
最后一种方法比第二种方法更好,因为它正在做 Encapsulation,这在 Java 上是一个很好的实践。