如何在java中调用另一个类中子类里的一个变量?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在java中调用另一个类中子类里的一个变量?相关的知识,希望对你有一定的参考价值。

我想在另一个class里调用UploadThread这个子类里面to这个变量,要如何调用?程序语句是什么?多谢!
public class UploadAction extends ActionSupport
class UploadThread implements Runnable
private File from ;
private String to ;
private HttpSession httpSession;
另一个class指的是另外的一个java文件

看如下示例,有问题请追问:

public class Outer
    // 成员内部类
    class Inner
        private String to;
        public String getTo()
            return to;
        
    
    // 静态内部类
    static class StaticInner
        private String to;
        public String getTo()
            return to;
        
    

class Test
    public static void main(String[] args)
        // 要访问 成员内部类 的 成员变量to,必须先实例化外部类然后再实例化内部类
        Outer.Inner inner = new Outer().new Inner();
        System.out.println(inner.getTo());
        // 访问 静态内部类 的 成员变量to
        Outer.StaticInner staticInner = new Outer.StaticInner();
        System.out.println(staticInner.getTo());
    

追问

照着你这么写了之后还是不对

这是怎么回事

追答

你少了变量名

追问

。。。我在哪儿加上就行了?

追答

UploadAction.UploadThread uploadThread =new UploadAction().new UploadThread();
System.out.println(UploadThread.getTo());

追问

改了还是不对

它提示说要在class前加一个public,然后我的那个外函数UploadThread定义的时候是这样的

new  UploadAction().new UploadThread();时,提示UploadThread的括号里面要加上三个变量,但我把from,to还有httpsession加进去的时候就提示没有定义这三个变量了,这是怎么回事?

追答

你具体代码我不是很清楚。如果还没解决的话,就加我QQ:2211900123。

参考技术A 调用另一个类的子类里的变量,首先必须实例化这个子类,可以通过形如:outerclass.innnerclass cl = new outerclass.innerclass();实例化该类之后,就可以通过实例调用变量。
一个类中包含另一个子类,也叫做内部类,内部类是不能脱离父类独立存在,必须加一层修饰才能使用。
参考技术B 定义UploadThread的带参数的构造,调用的类将自己的当前实例传递给UploadThread追问

再说具体些。。。不太明白,多谢

参考技术C 楼主问这样的问题证明Java编程思想尚在起步阶段,如此便接触Struts为之尚早。
如果不把Java基础弄明白再来解决眼前问题,则日后其他深层次问题楼主也是举足无措。追问

我也很无奈啊,要是不急着交工,我也会慢慢看的。。。

参考技术D 在UploadThread类中加 public String getTo() return this.to方法
在另一个类中假如UploadThread uploadthread 类变量
用uploadthread.getTo()方法得到to

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

【中文标题】如何在另一个类中调用列表对象【英文标题】: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,并且没有区别。如果这就是你想要的,那就继续吧。

以上是关于如何在java中调用另一个类中子类里的一个变量?的主要内容,如果未能解决你的问题,请参考以下文章

在MFC中,一个类如何调用其他类的变量和函数??

java中一个方法调用另一个方法。

在MFC中,一个类如何调用其他类的变量和函数??

java如何在子类中赋值给父类的变量

java中怎么样调用父类中的成员变量的值?谢谢!!!

Php 类中如何调用类外的变量