我正在尝试将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);
}
}
答案 0 :(得分:3)
我认为你要找的是一个界面。你应该声明一个这样的界面:
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();
}
答案 1 :(得分:2)
你要问的有点模糊,但也许会创建一个定义所有Interface
方法的getXSyllables()
。让您的课程(Something
和Another
)实施Interface
。最后,将getWords定义为private void getWords(YourInterface c)
。
答案 2 :(得分:1)
你混淆了课程和对象。
您传递给getWords()
的内容是一个对象。在第一种情况下,它是Something
类型的对象。在第二种情况下,它是Another
类型的对象。
此类代码工作的唯一方法是为Something
和Another
(让我们称之为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类定义中提供的默认实现;界面将使您在将来轻松扩展。