【问题标题】:How to pass, in parameter, a class and use its methods如何在参数中传递一个类并使用它的方法
【发布时间】:2012-08-03 14:08:54
【问题描述】:

正如标题所假设的那样,我如何在 Java 中做到这一点?我想做的是这样的

首先有一个类

public class MyFirstModel() {

    //standard constructor
    public MyFirstModel(){
            //some lines of codes
    }

    //A method
    public String getvalue() {

            //do something then
            return result;
    }
}

还有第二个模型(类)

public class MySecondModel() {

    //standard constructor
    public MySecondModel(){
            //some lines of codes
    }

    //A method
    public String getvalue() {

            //do something then
            return result;
    }
}

拥有这两个示例模型,我想根据动作传递一个类。假设有两个按钮,第一个按钮用于模型,第二个按钮用于第二个模型。要传递给的第三个类:

 FinalClass fclass = new FinalClass(<class here>);  <-- how do i pass the class here

在这里,我如何通过课程?在 FinalClass 上,它的构造函数是什么?以及如何访问传递的类的方法?

我希望你们明白我的意思。请帮忙。

【问题讨论】:

  • 您要传递实际的class(MySecondModel.class) 还是其中一个实例?
  • 你的两个模块是否共享一个接口?如果他们这样做了,传递一个实例会容易得多。
  • 据我所知,您的问题可以通过泛型还是简单的接口来解决?如果您想传入类的名称并让最终类创建对象,那么您可能正在寻找反射

标签: java class methods parameter-passing


【解决方案1】:

您不想让两个模型都实现一个接口?

MyModel.java:

public interface MyModel {
    public String getValue();
}

MyFirstModel.java:

public class MyFirstModel implements MyModel {
    public String getValue() {
        // stuff
    }
}

MySecondModel.java:

public class MySecondModel implements MyModel {
    public String getValue() {
        // stuff
    }
}

CallingClass.java:

public class CallingClass {
    private MyModel model = null;
    public CallingClass(MyModel model) {
        this.model = model;
    }
}

然后您可以根据需要构建 MyModel 并将其传递给 CallingClass。

【讨论】:

  • 哇,我喜欢这段代码。让我试试这个尺寸。谢谢大家的回复。
  • 我有问题。 MyModel 是唯一可以在这里通过的吗?如何通过 MySecondModel 或 MyFirstModel?
  • 抱歉,MyFirstModelMySecondModel 应该是类而不是接口(已编辑修复)。你可以任意构造CallingClass,如new CallingClass(new MyFirstModel())new CallingClass(new MySecondModel())
  • 抱歉,回复晚了,但这确实有效。谢谢大卫。
【解决方案2】:

您可以使用接口创建匿名对象:

public interface FinalClass {
   // Method definitions
}

public class MyFirstModel() implements FinalClass {
    //...
}

public class MySecondModel() implements FinalClass {
    //...
}

用途:

FinalClass fclass = new MyFirstModel();
// or
FinalClass fclass = new MySecondModel();

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2017-02-28
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    相关资源
    最近更新 更多