如何在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
的类中导入aLinks
和bLinks
对象以打印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
类中为 aLinks
和 bLinks
添加吸气剂,如下所示:
public List<LinkNode> getALinks()
return aLinks;
public List<LinkNode> getBLinks()
return bLinks;
【讨论】:
aLinks
和bLinks
是(静态)方法score
中的实例变量。这是行不通的。
对不起,但仍然出现错误:参数 aLinks 的修饰符非法;只允许 final 并且错误:参数 bLinks 的非法修饰符;只允许决赛@Master Mind
谢谢@MasterMind 我解决了这个问题。感谢您的帮助。
再次感谢。第一次我将它添加到Score
列表中的Scorer
类中并收到此错误。之后,我使用public static
方法将它添加到Score
列表之外,现在它工作正常。我只是想知道这会影响我的程序,因为我在score
列表之外带来了aLinks
和bLinks
行代码? @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<LinkNode> aLinks = new LinkedList<>();
和 List<LinkNode> bLinks = new LinkedList<>();
在里面 List<LinkNode> score(LinkNode sourceLink, List<LinkNode> links)
因为 score
正在收集我的 aLinks
和 bLinks
? @埃文威廉姆斯
@medo0070 这取决于你想要什么行为。如果您每次运行score
时都想要一个新的aLinks 和bLinks,您需要每次都初始化它们(不要再次声明它们!)。因此,您可以将aLinks = new LinkedList<>();
和bLinks = new LinkedList<>();
添加到score
方法的顶部,并从声明变量的位置删除`= new LinkedList()`,因此声明看起来像public static List<LinkNode> aLinks;
和@987654337 @
我按照你说的做了,但运行一段时间后出现错误。我想我会在删除 `= new LinkedList()` 之前保持原样。我在aLinks
和bLinks
顶部的score list
将从aLinks
和bLinks
收集信息并将它们添加到single list
。因此,如果我在我写的问题中将它们排除在score
列表之外。这会让我得到不真实或不预期的结果吗?非常感谢@Evan Williamsas【参考方案4】:
首先aLinks
和bLinks
应该是Scorer
类的成员,并且不应在该类的方法中声明。
像这样:
public class Scorer
public List<LinkNode> aLinks = new LinkedList<>();
public List<LinkNode> bLinks = new LinkedList<>();
其次,您必须在 MyParser
类中获得一个 Scorer
对象。然后您可以访问aLinks
和BLinks
。应该是这样的:
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
类创建的所有对象的列表都是相同的。如果您有myScorerChemistry
和myScorerPhysics
,它们将具有相同的aLinks
和bLinks
,并且没有区别。如果这就是你想要的,那就继续吧。以上是关于如何在java中调用另一个类中子类里的一个变量?的主要内容,如果未能解决你的问题,请参考以下文章