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