【问题标题】:Instantiating from a class that has an array parameter in constructor in java在java的构造函数中从具有数组参数的类实例化
【发布时间】:2017-10-11 17:43:16
【问题描述】:

我查看了几篇帖子以找到答案,但没有一个足够接近。

我有一个问题,听起来可能非常经验主义,我确信答案正盯着我看,但我想我是瞎了眼了!我有一个名为 DrugExcretion 的类,其构造函数具有一个参数,该参数是对数组的引用(名为 drugExcretionCode)。

我似乎无法在名为 DrugExcretionApp 的主类中找出要实例化(即创建对象)的 SYNTAX。两个类都在下面:-

如果有人可以指导我使用一种简单的方法来做到这一点,我将不胜感激。提前致谢。

public class DrugExcretion implements CautionInterface{

    int[] drugExcretionCode;
    private String[] drug;

    public DrugExcretion(String[] drug){
        this.drug = drug;
    }

    public String determineDanger(int[] drugExcretionCode){

    String site1 = "kidney";
    String site2 = "liver";
    String site;
    if (drugExcretionCode = 1){
        return "reduce dosage in elderly";
    }
    else{

        return "reduce dosage in children";
        }

}
}

x ----------------- o ----------------- x ---------- -------- o

public class drugExcretionApp {

public static void main(String[] args) {

        // TODO Auto-generated method stub

        final String drug1 = "enalapril";
        final String drug2 = "captopril";
        final String drug3 = "metoprolol";
        final String drug4 = "amlodipine";
        final String drug5 = "candesartan";

        String drug[] = {drug1, drug2, drug3, drug4, drug5};
        DrugExcretion listOne = new DrugExcretion(drug);


        DrugExcretion.determineDanger(new int[]{1, 1, 2, 2, 1});
        }

}

我收到一个错误“DrugExcretion 无法解析为一个类型”,这最初让我认为项目设置不正确,因此应用程序类无法看到 DrugExcretion 类 - 我重新排列了这些类以保持它们相同包,但错误仍然存​​在。

这似乎是访问修饰符的问题 - 我是否无意中将某些东西设为静态???

顺便说一句,接口只包含第一个类中唯一方法的签名。

【问题讨论】:

  • 两个类是否在同一个包中?如果不是,您必须导入异常类
  • 你的包结构是什么样的?另外,你是如何编译这段代码的?通过 IDE 还是在命令行上?如果在命令行上,您是否指定类路径?
  • 嗨 Jens,是的,正如我提到的,我将它们放在同一个包中,尝试对其进行排序 - 没有效果!
  • 嗨 Rinn,使用 Eclipse。

标签: java arrays object syntax


【解决方案1】:

由于你正在实例化DrugExcretion类,你需要调用

listOne.determineDanger(new int[] { 1, 1, 2, 2, 1 });

另外,请检查DrugExcretion 类中的代码。它应该是等于运算符而不是赋值。

if (drugExcretionCode == 1){

【讨论】:

  • 谢谢 rslj,这已经对一些错误进行了排序 - 我仍然收到一个错误,“DrugExcretion”被下划线(带有锯齿线)和错误“DrugExcretion 无法实例化”。
  • 大家好,各位乐于助人的专家,我已经取得了一些进展(在当之无愧的喝杯茶休息之后!!) - 显然,我无法用对象实例化 DrugExcretion 类的原因显然是因为接口需要是一个抽象类或者它必须有一个未实现的方法 - 但是,如果我将修饰符“抽象”添加到接口名称和/或添加一个自动未实现的方法,错误消失了,但是在运行程序终止。现在有任何关于解决方案的想法吗?非常感谢!
【解决方案2】:

你必须像这样打电话给determineDanger

listOne.determineDanger(new int[]{1, 1, 2, 2, 1]);

DrugExcretion.xxx 将用于DrugExcretion 的静态方法xxx。 但是determineDanger是一个实例方法,所以需要在类的实例上调用,本例为listOne

【讨论】:

  • 嗨,Kevin,感谢您的输入 - 我之前已经将方法调用从 "DrgExcretion.determine-----" 更改为 "listOne.determineDanger(-------"发表上述评论。
  • 为了使接口工作,类需要是通用的,或者它们的方法不能工作(需要更具体的子类)因此这些类需要是抽象的,即它们不能被实例化 - 我相信我的类叫做DrugExcretion 过于笼统,因此被视为需要抽象并且因此具有未实现的方法。但我想听听任何可以支持/扩展此观点或用完整解释驳斥它的人的意见谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 2020-01-06
  • 2013-06-14
  • 1970-01-01
相关资源
最近更新 更多