将Class对象传递给方法

时间:2014-10-06 19:34:01

标签: java class parameter-passing

我正在尝试将Class传递给方法。程序运行时Class会发生变化,因此我希望在我的程序中重复使用相同的方法,而不是在resetWords()方法中调用相同的函数。

这是我被困的地方:

private void getWords(Class c) {
    singles = c.getSingleSyllables();
    doubles = c.getDoubleSyllables();
    triples = c.getTripleSyllables();
    quadruples = c.getQuadrupleSyllables();
    quintuples = c.getQuintupleSyllables();
}

private void resetWords() {
    if (generated.equals("SOMETHING")) {
        Something c = new Something();
        getWords(c);
    }
    else if (generated.equals("ANOTHER")) {
        Another c = new Another();
        getWords(c);
    }
}

5 个答案:

答案 0 :(得分:3)

我认为你要找的是一个界面。你应该声明一个这样的界面:

public interface Passable
{
    public List<String> getSingleSyllables();
    public List<String> getDoubleSyllables();
    // ...
}

然后,让SomethingAnother实施它们:

public class Something implements Passable
{
    // method declarations
}

现在,将您的方法更改为:

private void getWords (Passable c) {
    singles = c.getSingleSyllables();
    doubles = c.getDoubleSyllables();
    triples = c.getTripleSyllables();
    quadruples = c.getQuadrupleSyllables();
    quintuples = c.getQuintupleSyllables();
}

答案 1 :(得分:2)

你要问的有点模糊,但也许会创建一个定义所有Interface方法的getXSyllables()。让您的课程(SomethingAnother)实施Interface。最后,将getWords定义为private void getWords(YourInterface c)

答案 2 :(得分:1)

你混淆了课程和对象。

您传递给getWords()的内容是一个对象。在第一种情况下,它是Something类型的对象。在第二种情况下,它是Another类型的对象。

此类代码工作的唯一方法是为SomethingAnother(让我们称之为HavingSyllabes)定义公共基类或接口,其中包含getWords()中使用的5种方法{1}}:getSingleSyllables()getDoubleSyllabes()等。getWords()的签名应为

private void getWords(HavingSyllabes c)

答案 3 :(得分:1)

如果类总是实现getSingleSyllables()getDoubleSyllables()等,那么你应该考虑继承抽象类或实现接口。

则...

private void getWords(YourInterface / YourAbstractClass foo) {
...
}

答案 4 :(得分:0)

您的问题没有提供足够的细节来清楚回答。

根据您的设计/最终目标,您应该了解并理解三个概念:

  • 接口
  • 抽象类
  • 反射

接口将定义实现接口的类必须提供的方法。实现接口的每个类都必须提供该方法的代码。

抽象类将提供您正在寻找的行为的单个实现。

反思是一种先进的概念。我建议你现在远离它 - 但你应该知道它。

根据您的示例代码,您可能希望使用抽象类。通过正确设计,您可以通过定义接口,使用Abstract Class实现该接口,然后根据需要扩展该Abstract类来提高灵活性/重用性。扩展Abstract的每个类都将获取您在Abstract类定义中提供的默认实现;界面将使您在将来轻松扩展。