java - 爪哇。工厂创建应该返回通用类
问题描述
有人可以帮忙吗。
我想创建一个工厂,它会返回特定的类。
出现问题 -filterFactory.getFilter(myColumn.getType()).setMin(5);
出现错误:无法解析“对象”中的方法“setMin”
public enum Columns {
Name(ColumnType.String),
Age(ColumnType.Numeric);
private final ColumnType type;
Columns(ColumnType type) {
this.type = type;
}
public ColumnType getType() {
return type;
}
}
public enum ColumnType {
String,
Numeric
}
public class NumericFilter extends ColumnFilter {
public void setMin(int min) {
System.out.println("min is set" + min);
}
}
public class StringFilter extends ColumnFilter {
public void setFilter(String filter) {
System.out.println("filter is set to:" + filter);
}
}
public class ColumnFilterFactory {
public <T> T getFilter(ColumnType type) {
if (type == null) {
return null;
}
if (type == ColumnType.String) {
return (T) new StringFilter();
} else if (type == ColumnType.Numeric) {
return (T) new NumericFilter();
}
return null;
}
}
public class BasicTest {
public static void main(String[] args) {
Columns myColumn = Columns.Age;
ColumnFilterFactory filterFactory = new ColumnFilterFactory();
filterFactory.getFilter(myColumn.getType()).setMin(5);
}
}
解决方案
编译器无法知道工厂将返回什么类型,所以你需要给它一点帮助。例如通过使用中间变量:
NumericFilter nf = filterFactory.getFilter(myColumn.getType());
nf.setMin(5);
推荐阅读
- python - 通过 Python Paramiko 远程运行时找不到“arp”命令
- amazon-web-services - 如何更改 CodePipeline 工件行为?(如果可能的话)
- spacy - spacy Matcher:获取原始密钥
- javascript - 使用多个变量优化 Javascript 脚本
- google-cloud-run - GKE Anthos 上的 Cloud Run - Hello world 无法正常工作
- c++ - 当 fun 是静态函数时,为什么我们需要在 decltype(&fun) 中添加 &?
- git - 文件未显示在 Jenkins 根目录中
- php - 使用 Laravel Collect 创建组合的正确方法
- python - 关于不同机器之间的TCP/IP通信字符串断的问题
- json - ChangeNotifierProxyProvider 颤动