0

さまざまな列挙型でスーパータイプを使用できるようにしたいのですが、コードは次の 3 つの部分で構成されています。

Manager.search:

public final List<B> search(final Order order, final Field field, final AbstractConstraint... c) throws SearchException {
    if (c.length == 0) {
        throw new IllegalArgumentException("orm.Manager.search: c.length == 0");
    }
    try {
        List<B> beans = new ArrayList<>();

        for (AbstractConstraint constraint : c) {
            try (PreparedStatement ps = new QueryBuilder(connection, tableName(), getPaths(), searchQuery()).add(constraint).order(order, field).build();ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    beans.add(createBean(rs));
                }
            }
        }
        return beans;
    } catch (SQLException ex) {
        Logger.getLogger(Manager.class.getName()).log(Level.SEVERE, null, ex);
        throw new SearchException(ex);
    }
}

ここでは変数orderfield変数が最も重要です。

自動生成された TemplateAttributeField.java:

public enum TemplateAttributeField implements Field {
    templateId,
    attributeOrder,
    attributeName,
    x1,
    x2;
}

そして呼び出しコード:

try (TemplateAttributeManager templateAttributeManager = ManagerFactory.getTemplateAttributeManager()) {
    List<TemplateAttributeBean> templateAttributes = null;
    try {
        templateAttributes = templateAttributeManager.search(Order.ASCENDING, TemplateAttributeField.attributeOrder, new TemplateAttributeConstraint.Builder().templateId(template.getTemplateId()).build());
    } catch (SearchException ex) {
        Logger.getLogger(OutputProcessor.class.getName()).log(Level.SEVERE, null, ex);
    }
    for (Word word : words) {

    }
}

ただしtemplateAttributes = ...、次の例外/エラーが発生します。

no suitable method found for search(Order,TemplateAttributeField,TemplateAttributeConstraint)
    method Manager.search(Order,Field,AbstractConstraint...) is not applicable
      (actual argument TemplateAttributeField cannot be converted to Field by method invocation conversion)

また、Fieldクラスは、追加の機能を妨げないインターフェース以上のものです。

ここに何かが欠けていますか、それともどうすれば修正できますか?

4

1 に答える 1

0

最小限の実用的な例を作成しようとしましたが、うまくいくようです。これが機能し、必要なものと同じかどうか試していただけますか?

public class Test {
    static interface I {}
    static enum E implements I {A}
    static void m(I i) {}

    public static void main(String[] args) {
        m(E.A);
    }
}

また、メソッドで必要なのと同じFieldインターフェイスを実装していることを確認してください。enum名前の衝突があり、異なるパッケージのインターフェースを使用している可能性があります。

于 2013-07-16T07:44:43.573 に答える