首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java语言。工厂创建应该返回泛型类

Java语言。工厂创建应该返回泛型类
EN

Stack Overflow用户
提问于 2020-06-30 11:05:34
回答 1查看 61关注 0票数 0

有人能帮忙吗。

我想创建一个工厂,它将返回特定的类。

有问题的行- filterFactory.getFilter(myColumn.getType()).setMin(5);有一个错误:无法解决'setMin‘中的'Object’方法

代码语言:javascript
复制
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);
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 11:16:36

编译器不可能知道工厂将返回哪种类型,所以您需要给它一点帮助。例如,通过使用中间变量:

代码语言:javascript
复制
NumericFilter nf = filterFactory.getFilter(myColumn.getType());
nf.setMin(5);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62656033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档