Java 如何访问抽象类';哈希映射?

Java 如何访问抽象类';哈希映射?,java,class,hashmap,abstract,Java,Class,Hashmap,Abstract,我有两节课。一个是公共类,另一个是带有对象HashMap的抽象类。如何从公共类调用抽象类'HashMap.get(string)方法?我是Java新手,可能会遇到这个问题,因为我不了解如何正确设置Java文件 下面是我的两个类的部分…(在同一个文件Evaluator.java) 欢迎来到java世界! 如果你想要一个精确答案,请给我们你的两个类(公共类和抽象类)的代码 您可能需要创建一个非抽象类来扩展抽象类以调用该方法。您不能只调用抽象类上的方法。您需要该类的一个实例。因为类是抽象的,所以您必须

我有两节课。一个是公共类,另一个是带有对象HashMap的抽象类。如何从公共类调用抽象类'HashMap
.get(string)
方法?我是Java新手,可能会遇到这个问题,因为我不了解如何正确设置Java文件

下面是我的两个类的部分…(在同一个文件
Evaluator.java


欢迎来到java世界! 如果你想要一个精确答案,请给我们你的两个类(公共类和抽象类)的代码


您可能需要创建一个非抽象类来扩展抽象类以调用该方法。

您不能只调用抽象类上的方法。您需要该类的一个实例。因为类是抽象的,所以您必须为它创建一个具体的类来获得方法

class Foo extends AbstractFoo
{
    ... Implement any required methods ...
}
现在您可以执行以下操作:

Foo bar = new Foo();
bar.get("thing");

这个问题的直接答案是将HashMap设置为公共字段或静态字段

abstract class Operator {
        public static HashMap operators;
        Operator(){
          Operator.operators = new HashMap();
          Operator.operators.put("+",new AdditionOperator()); 
          Operator.operators.put("-",new SubtractionOperator());
        }
    }

public class  Evaluator {
 ...code        
 public int eval (String expr)
    Operator newOpr = (Operator) Operator.operators.get(tok);
 }
 ... more code
} 
我会说HashMap在错误的类中。这样,HashMap必须是静态字段或公共字段。在我看来,您甚至不需要运算符抽象类。接口将完成这项工作,HashMap可以位于名为OperatorFactory的类中,并且只公开一个公共方法操作符create(string操作符)。这样,您的Evaluator类甚至不需要知道其他类正在使用的内部数据结构是什么

interface Operator(){

     public Operand execute(Operator op1, Operator op2);
}

public class AdditionOperator implements Operator{
    public Operand execute(Operand op1, Operand op2){
        return op1;
    }

}

public class OperatorFactory(){
    //Could use a HasMap internally in this class but it doesn't matter 
    //to the other classes
    public Operator crate(string operator){
        if( operator == "+")
           return new AdditionOperator();
    }

}

 public class  Evaluator {
    ...code        
    OperatorFactory operatorFactory;
    public Evaluator(OperatorFactory operatorFactory){
       operatorFactory = operatorFactory;
    }
    public int eval (String expr) {
       Operator newOpr = operatorFactory.create(tok);
    }
    ... more code
 } 

您的抽象类是否有一个方法公开对
HashMap
或其get方法的访问?它需要一个。你能发布你的类的代码吗?如果可以,让hashMap(theMap)成为静态的。否则,您必须将其子类化才能访问其实例方法。抽象方法没有get。它是一个名为Operator的类,用于扩展以创建运算符对象,如AdditionOperator或DesculationOperator。我编辑了我的注释。通常情况下,如果您有一个抽象类,您会希望将其子类化。okay将发布此代码。我不想发布我的代码,因为它基本上需要调试帮助。
interface Operator(){

     public Operand execute(Operator op1, Operator op2);
}

public class AdditionOperator implements Operator{
    public Operand execute(Operand op1, Operand op2){
        return op1;
    }

}

public class OperatorFactory(){
    //Could use a HasMap internally in this class but it doesn't matter 
    //to the other classes
    public Operator crate(string operator){
        if( operator == "+")
           return new AdditionOperator();
    }

}

 public class  Evaluator {
    ...code        
    OperatorFactory operatorFactory;
    public Evaluator(OperatorFactory operatorFactory){
       operatorFactory = operatorFactory;
    }
    public int eval (String expr) {
       Operator newOpr = operatorFactory.create(tok);
    }
    ... more code
 }