【问题标题】:JAVA - create objects from abstract class depending on argumentsJAVA - 根据参数从抽象类创建对象
【发布时间】:2015-02-05 14:48:50
【问题描述】:

我 100% 肯定以前有人问过这个问题,但我不知道用谷歌搜索什么:

假设我有一个抽象类 Ngram,它基本上只是一个 List:

abstract class Ngram {
private List<Word> words = new ArrayList<Word>();
... }

现在是否可以根据参数 n 创建子类 Unigram、Bigram... 的对象?像这样的:

int n;
for(Word w : Sentence.getWordList()) {
Ngram ngram = new Ngram(n); 
... }

所以 Ngram 的构造函数看起来像这样:

Ngram(int n) {
if(n==1) : //create Object of Type Unigram, let ngram refer to this object
}

我尝试返回一个新的 Unigram,但这不起作用。我想让抽象超类的构造函数这样做不是最好的主意,但我不知道如何解决这个问题。任何提示都非常感谢,谢谢

【问题讨论】:

    标签: java class constructor abstract


    【解决方案1】:

    对此有一个模式,Factory

    class Ngram { }
    class Ugram extends Ngram { }
    class Bigram extends Ngram { }
    
    public class NgramFactory {
        public static Ngram createNgram(int n) {
            if (n ==1) {
                return new Ugram();
            } else {
                return new Bigram();
            }
        }
    }
    

    用法:NgramFactory.createNgram(x)

    【讨论】:

    • 谢谢,这真的很有意义。
    【解决方案2】:
    public Ngram createNgram(int n){
        switch(n){
        case 1:
            return new Unigram();
        case 2:
            ...
        }
    }
    

    【讨论】:

    • 嗯,这实际上是避免所有 if(n==...) else if() 语句的好方法,谢谢
    【解决方案3】:

    使用Factory-Pattern 让您根据自己的参数创建新对象

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-21
      • 1970-01-01
      • 2016-07-23
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多