如何在另一个类中调用列表对象

Posted

技术标签:

【中文标题】如何在另一个类中调用列表对象【英文标题】:How to call list objects inside another class 【发布时间】:2015-05-01 15:01:57 【问题描述】:

我在名为Scorer.java 的类中有一个列表对象,我想在另一个名为MyParser.java 的类中导入aLinksbLinks 对象以打印aLinks.size()bLinks.size() 我试图导入类首先命名调用对象,但我不能这样做。你能告诉我如何将列表的对象从类导入到另一个类吗?以下是课程:

我的Scorer.java

 public class Scorer 
 public static List<LinkNode> score(LinkNode sourceLink, List<LinkNode> links)

 List<LinkNode> aLinks = new LinkedList<>();
 List<LinkNode> bLinks = new LinkedList<>();

    for (LinkNode link : links) 
        if(isbLink(sourceLink, link))  
            bLinks.add(link);
         else 
            aLinks.add(link);
        
    

我的其他班级MyParser.java

public class MyParser 
private static final String[] PARSE_TAGS = new String[]"a[href", "area[href";


public static List<LinkNode> parse(LinkNode inputLink)
    Set<LinkNode> outputLinks = new LinkedHashSet<>();
    try 
         Document parsedResults = Jsoup
                .connect(inputLink.getUrl())
                .timeout(READ_TIMEOUT_IN_MILLISSECS)
                .get();

        String tag;
        Elements elements;
        List<LinkNode> result;

        //a[href
        tag = "a[href";
        elements = parsedResults.select(tag);
        result = toLinks(inputLink, elements, tag);
        outputLinks.addAll(result);

        // I want to print `aLinks.size()` and `bLinks.size()` here

     

    return new LinkedList<>(outputLinks);

【问题讨论】:

【参考方案1】:

只要打电话

   MyParser myparser = new MyParser (); 
   myparser.parse(scorerInstance.getAlinks());
   myparser.parse(scorerInstance.getBlinks());

scorerInstance 是 MyScorer 的一个实例。您应该在 MyScorer 类中为 aLinksbLinks 添加吸气剂,如下所示:

 public List<LinkNode> getALinks() 
      return  aLinks;
  

 public List<LinkNode> getBLinks() 
      return  bLinks;
  

【讨论】:

aLinksbLinks 是(静态)方法score 中的实例变量。这是行不通的。 对不起,但仍然出现错误:参数 aLinks 的修饰符非法;只允许 final 并且错误:参数 bLinks 的非法修饰符;只允许决赛@Master Mind 谢谢@MasterMind 我解决了这个问题。感谢您的帮助。 再次感谢。第一次我将它添加到Score 列表中的Scorer 类中并收到此错误。之后,我使用public static 方法将它添加到Score 列表之外,现在它工作正常。我只是想知道这会影响我的程序,因为我在score 列表之外带来了aLinksbLinks 行代码? @MasterMind 如果它们属于 Score,最好将它们放入 Score 中。否则,不。【参考方案2】:

您必须在Scorer 类中将所需的变量声明为全局变量和public 以及static

 public class Scorer 

 public static List<LinkNode> aLinks = new LinkedList<>();
 public static List<LinkNode> bLinks = new LinkedList<>();
 public static List<LinkNode> score(LinkNode sourceLink, List<LinkNode> links)

    for (LinkNode link : links) 
        if(isbLink(sourceLink, link))  
            bLinks.add(link);
         else 
            aLinks.add(link);
        
    
   

然后在MyParser类中,调用class_name .(dot) static_variable 。

然后在MyParser 类中试试这个:

System.out.println(Scorer.aLinks.size()+ " " + Scorer.bLinks.size());

【讨论】:

score() 是一个静态方法。这是行不通的。 我做不到。我有:允许参数的非法修饰符仅 final 。我 cpuld 没有在代码前面写 public @Md.NasirUddinBhuiyan @medo0070 这是因为您没有将定义移出方法并将其转换为字段。你必须把它放在方法定义之外。【参考方案3】:

如果类位于不同的包中,您需要将链接公开。但是您还需要将其设为静态并将其转换为类的字段

public class Scorer 
    public static List<LinkNode> aLinks = new LinkedList<>();

那你就可以Scorer.alinks访问了

【讨论】:

感谢您的帮助,但它不起作用。该程序不允许我在 List aLinks = new LinkedList(); 前面添加public static它说:illegal modifier for parameter only final is permitted@Evan Williams @medo0070 将行移出方法并直接在public class Scorer 下,就像我在回答中所做的那样。 谢谢你现在的工作,但我想问这会影响我的程序吗?我的意思是在我的 lins 中 List&lt;LinkNode&gt; aLinks = new LinkedList&lt;&gt;(); List&lt;LinkNode&gt; bLinks = new LinkedList&lt;&gt;(); 在里面 List&lt;LinkNode&gt; score(LinkNode sourceLink, List&lt;LinkNode&gt; links) 因为 score 正在收集我的 aLinksbLinks ? @埃文威廉姆斯 @medo0070 这取决于你想要什么行为。如果您每次运行score 时都想要一个新的aLinks 和bLinks,您需要每次都初始化它们(不要再次声明它们!)。因此,您可以将aLinks = new LinkedList&lt;&gt;();bLinks = new LinkedList&lt;&gt;(); 添加到score 方法的顶部,并从声明变量的位置删除`= new LinkedList()`,因此声明看起来像public static List&lt;LinkNode&gt; aLinks; 和@987654337 @ 我按照你说的做了,但运行一段时间后出现错误。我想我会在删除 `= new LinkedList()` 之前保持原样。我在aLinksbLinks 顶部的score list 将从aLinksbLinks 收集信息并将它们添加到single list。因此,如果我在我写的问题中将它们排除在score 列表之外。这会让我得到不真实或不预期的结果吗?非常感谢@Evan Williamsas【参考方案4】:

首先aLinksbLinks 应该是Scorer 类的成员,并且不应在该类的方法中声明。

像这样:

public class Scorer 
    public List<LinkNode> aLinks = new LinkedList<>();
    public List<LinkNode> bLinks = new LinkedList<>();

其次,您必须在 MyParser 类中获得一个 Scorer 对象。然后您可以访问aLinksBLinks。应该是这样的:

Scorer myScorer = new Scorer();
System.out.println(myScorer.aLinks().size());
System.out.println(myScorer.bLinks().size());

这应该添加到 MyParser 类中的注释部分的位置。

第三,如果您的score 方法是静态的,那么您的score 方法中也应该有一个Score 类的实例。您可以将该实例传递给score 方法。像这样:

public static List<LinkNode> score(LinkNode sourceLink, List<LinkNode> links, Score myScore)
    //myScore.aLinks or myScore.bLinks can be used here

【讨论】:

score() 是一个静态方法。这是行不通的。 哦!我错过了。让我编辑代码。感谢您指出! 我出错了,我无法在它所说的代码前添加“Public”:允许参数的非法修饰符仅 final @soham.m17 因此 aLinks 和 bLinks 是静态的,因此您可以将 getter getBLinks() static 好的。第一件事。 score 不是列表,而是方法。 Scorer 是一个类。当您在 score 函数中添加这两个声明语句时,您不能将这些变量设为公开。这就是为什么我告诉你在score 方法之外添加那些。现在我没有告诉你让他们static。当您将它们设为static 时,您为Scorer 类创建的所有对象的列表都是相同的。如果您有myScorerChemistrymyScorerPhysics,它们将具有相同的aLinksbLinks,并且没有区别。如果这就是你想要的,那就继续吧。

以上是关于如何在另一个类中调用列表对象的主要内容,如果未能解决你的问题,请参考以下文章

c# Unity - 如何在另一个类中调用结构对象数组

如何在另一个类中使用创建的列表?

如何在另一个类中调用一个类的 main() 方法?

在 React JavaScript 中,如何在另一个类中调用一个类?

如何在另一个类中调用类类型的向量?

如何在另一个类中使用带有构造函数的类?