JAVA - 根据参数从抽象类创建对象

标签 java class constructor abstract

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

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

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,但这不起作用。我想让抽象父类(super class)的构造函数这样做并不是最好的主意,但我不知道如何解决这个问题。如有任何提示,我们将不胜感激,谢谢

最佳答案

有一个模式可以解决这个问题,即工厂

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)

关于JAVA - 根据参数从抽象类创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28346956/

相关文章:

C# 构造函数注入(inject)和构造函数重载

java - 使用 Jackson 自定义 JSON 序列化/反序列化

java - 服务器-客户端不一致的结果

c# - ((System.Object)p == null)

C++ 覆盖基本成员值

C++ - 覆盖/重建整个 std::vector 的最佳实践

oop - 构造函数的使用 - 奇怪的疑问

java - IAIK PCKS11Provider VS IAIK PKCS11Wrapper key 生成

java - 从 Wiki Dump 中提取文章

java - GUI 刽子手游戏——我怎样才能让这些不同的部分协同工作?