将类对象传递给方法
我试图将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);
}
}
我想你要找的是一个接口。你应该声明这样的接口:
public interface Passable
{
public List<String> getSingleSyllables();
public List<String> getDoubleSyllables();
// ...
}
然后,让Something
和Another
实现它们:
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();
}
有点含糊,你要问什么,但也许是创建一个Interface
定义所有的getXSyllables()
方法。让你的班级(Something
和Another
)实施Interface
。最后,将getWords定义为private void getWords(YourInterface c)
。
你在混淆类和对象。
你传递给getWords()
的是一个对象。在第一种情况下,它是Something
类型的对象。在第二种情况下,它是Another
类型的对象。
对于这样的代码,以工作的唯一方法是定义一个共同的基类或接口,用于Something
和Another
(让我们称之为HavingSyllabes
),含在getWords()
中使用的5种方法:getSingleSyllables()
,getDoubleSyllabes()
等和签名getWords()
应该
private void getWords(HavingSyllabes c)
如果类始终贯彻getSingleSyllables()
,getDoubleSyllables()
等。那么你应该考虑从一个抽象类继承,或实现一个接口。
则...
private void getWords(YourInterface/YourAbstractClass foo) {
...
}
您的问题不提供足够的细节来清晰回答。
根据您的设计/最终目标,有三个概念,你应该看看和了解:
- 接口
- 抽象类
- 反思
的接口将定义实现该接口的类必须提供的方法。每个实现接口的类都必须提供该方法的代码。
抽象类将提供您正在查找的行为的单个实现。
反射是一个先进的概念。我建议你此时远离它 - 但你应该意识到它。
鉴于您的示例代码,您可能需要使用抽象类。设计正确后,您可以通过定义一个接口来增加灵活性/重用性,使用抽象类实现该接口,然后根据需要扩展该抽象类。每个扩展Abstract的类都将选择您在Abstract类定义中提供的默认实现;该界面将使您可以轻松扩展。