gpt4 book ai didi

java - 在java的main方法中调用内部类

转载 作者:行者123 更新时间:2023-12-02 04:13:33 24 4
gpt4 key购买 nike

因此,我已经尝试查找导致此问题的原因,并将我的代码与其他代码进行比较以查找任何可能的错误,但我尚未找到任何其他可能导致此问题的内容。

我正在尝试调用内部类 Pair 来存储数据。

有关我的项目的快速信息。

获取投票数据并确定某人的政治立场。现在我只是想解析数据。示例数据

Rep1[tab]D[tab]-+-+-++---

我将其存储为...

ArrayList<Pair<String,String>>

所以rep1是ArrayList中的位置,然后D和-+-+-++---是一对。

但是我在尝试实例化 Pair 类时遇到问题“无法从静态上下文引用非静态变量”

具体来说

C:\Users\Stephanie\Desktop>javac DecisionTree.java
DecisionTree.java:26: error: non-static variable this cannot be referenced from a static context
Pair pair = new Pair();
^
1 error

代码:

public class DecisionTree{  
public static void main(String[] args)
{
ArrayList<Pair> data = new ArrayList<Pair>();
FileReader input = new FileReader ("voting-data.tsv");
BufferedReader buff = new BufferedReader(input);
String line = null;

while((line=buff.readLine())!=null)
{
Pair pair = new Pair();
String[] array = line.split("\\t");
pair.setLabel(array[1]);
pair.setRecord(array[2]);
data.add(pair);
}
}


/**
* Private class to handle my inner data
*/
public class Pair
{
private String label;
private String record;
/**
* contructor
*@param String label, the label of the person's party
*@param String record, their voting record
*/
private Pair(String label, String record)
{
this.label = label;
this.record = record;
}
/**
* empty contructor
*/
private Pair()
{

}
/**
* get the label
*@return String label, the label of the person's party
*/
private String getLabel()
{
return label;
}
/**
* get the record
*@return String record, their voting record
*/
private String getRecord()
{
return record;
}
/**
* set the label
*@param String label, the label of the person's party
*/
private void setLabel(String label)
{
this.label=label;
}
/**
* set the record
*@param String record, their voting record
*/
private void setRecord(String record)
{
this.record=record;
}
}

}

谢谢!我觉得我错过了一些非常基本的东西,我已经很长时间没有使用 Java

最佳答案

非静态内部类与 Java 中封闭类的实例相关联。这意味着示例中 Pair 类的实例属于 DecisionTree 的特定实例。您只能在 DecisionTree 实例的上下文中创建它。您不能在 main() 方法中使用 new Pair() 直接创建 Pair,因为该方法是静态的(因此,它是不与 DecisionTree 实例关联)。

如果您不希望这样,请将内部类设置为静态:

public class DecisionTree {
// ...

public static class Pair {
// ...
}
}

关于java - 在java的main方法中调用内部类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com