因此,我已经尝试查找造成这种情况的原因,并将我的代码与任何可能的错误进行比较,而我还没有找到任何可能导致此问题的其他内容。
我试图调用内部类对来存储数据。
有关我的项目的快速信息。
获取投票数据并确定某人的政治立场。 现在我只想解析数据。 示例数据
Rep1[tab]D[tab]-+-+-++---
我将其存储为......
ArrayList<Pair<String,String>>
所以rep1是ArrayList中的位置,然后D和 - + - + - ++ ---是对。
但我遇到了尝试实例化Pair类的问题&#34;非静态变量,这不能从静态上下文中引用&#34;
具体地
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以来已经很久了
答案 0 :(得分:1)
制作Pair
static
,即:
public static class Pair
否则,您无法在Pair
中构造main()
对象,因为它是静态方法。内部类(与静态嵌套类相对)需要周围的实例。
此外,您的评论说Pair
是私有的,但该类标记为public
。如果这是您的意图,请将其设为private
。
答案 1 :(得分:1)
非静态内部类与Java中的封闭类的实例相关联。这意味着示例中的类Pair
的实例属于DecisionTree
的特定实例。您只能在DecisionTree
的实例的上下文中创建它。您无法在Pair
方法中使用new Pair()
直接创建main()
,因为该方法是静态的(因此,它与{{{{}}的实例无关1}})。
如果您不想这样做,请制作内部课程DecisionTree
:
static
答案 2 :(得分:0)
Pair是一个内部类。内部类的实例与它们所属的类的实例相关联,并且只能在父实例的上下文中创建。 如果声明Pair static,它将成为嵌套类,更像是常规类。封闭类仅提供其名称。