JAVA - 根据参数从抽象 class 创建对象
JAVA - create objects from abstract class depending on arguments
我 100% 肯定之前有人问过这个问题,但我不知道要问什么 google:
假设我有一个抽象的 class Ngram,它基本上只是一个列表:
abstract class Ngram {
private List<Word> words = new ArrayList<Word>();
... }
现在是否可以根据参数n创建subclass 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
}
我尝试 return 一个新的 Unigram,但这不起作用。我想让抽象超级 class 的构造函数来做这件事并不是最好的主意,但我不知道如何解决这个问题。感谢任何提示,谢谢
使用 Factory
模式让您根据参数创建新对象
正是这个模式,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)
public Ngram createNgram(int n){
switch(n){
case 1:
return new Unigram();
case 2:
...
}
}
我 100% 肯定之前有人问过这个问题,但我不知道要问什么 google:
假设我有一个抽象的 class Ngram,它基本上只是一个列表:
abstract class Ngram {
private List<Word> words = new ArrayList<Word>();
... }
现在是否可以根据参数n创建subclass 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
}
我尝试 return 一个新的 Unigram,但这不起作用。我想让抽象超级 class 的构造函数来做这件事并不是最好的主意,但我不知道如何解决这个问题。感谢任何提示,谢谢
使用 Factory
模式让您根据参数创建新对象
正是这个模式,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)
public Ngram createNgram(int n){
switch(n){
case 1:
return new Unigram();
case 2:
...
}
}