2014-10-06 153 views
2

我试图将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); 
    } 
} 

回答

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(); 
} 
2

有点含糊,你要问什么,但也许是创建一个Interface定义所有的getXSyllables()方法。让你的班级(SomethingAnother)实施Interface。最后,将getWords定义为private void getWords(YourInterface c)

1

你在混淆类和对象。

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

对于这样的代码,以工作的唯一方法是定义一个共同的基类或接口,用于SomethingAnother(让我们称之为HavingSyllabes),含在getWords()中使用的5种方法:getSingleSyllables()getDoubleSyllabes()等和签名getWords()应该

private void getWords(HavingSyllabes c) 
1

如果类始终贯彻getSingleSyllables()getDoubleSyllables()等。那么你应该考虑从一个抽象类继承,或实现一个接口。

则...

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

您的问题不提供足够的细节来清晰回答。

根据您的设计/最终目标,有三个概念,你应该看看和了解:

  • 接口
  • 抽象类
  • 反思

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

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

反射是一个先进的概念。我建议你此时远离它 - 但你应该意识到它。

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