1

述語を使用しようとしていますが、メソッドのオーバーロードが機能しているため使用できません...

配列 (varargs) でフィルターを使用したいのですが、配列をリストに変換してフィルター処理する組み込みメソッドを述語で使用したいと考えています。

これはエラーです:タイプ Predicates のメソッド filter(Iterable, Predicate) は、引数 (Class[], Predicate) には適用できません。

private static final Predicate<Method> isTestMethod = new Predicate<Method>() {
    @Override
    public boolean evaluate(Method input) {
        return input.isAnnotationPresent(Test.class);
    }
};

public static void testClasses(Class<?>... classes) {
    for (Method method : filter(classes, isTestMethod)) {

    }
}

これは述語メソッドです。

/**
 * Returns the elements of <tt>unfiltered</tt> that satisfy a predicate.
 * 
 * @param unfiltered An iterable containing objects of any type
 * that will be filtered and used as the result.
 * @param predicate The predicate to use for evaluation.
 * @return An iterable containing all objects which passed the predicate's evaluation.
 */
public static <T> Iterable<T> filter(Iterable<T> unfiltered, Predicate<T> predicate) {
    checkNotNull(unfiltered);
    checkNotNull(predicate);

    List<T> result = new ArrayList<T>();
    Iterator<T> iterator = unfiltered.iterator();
    while (iterator.hasNext()) {
        T next = iterator.next();
        if (predicate.evaluate(next)) {
            result.add(next);
        }
    }
    return result;
}

/**
 * Returns the elements of <tt>unfiltered</tt> that satisfy a predicate.
 * 
 * @param unfiltered An array containing objects of any type
 * that will be filtered and used as the result.
 * @param predicate The predicate to use for evaluation.
 * @return An iterable containing all objects which passed the predicate's evaluation.
 */
public static <T> Iterable<T> filter(T[] unfiltered, Predicate<T> predicate) {
    return filter(Arrays.asList(unfiltered), predicate);
}
4

2 に答える 2

4

フィルターはメソッドに適用できますが、クラスのコレクションがあります。isTestMethod述語をクラスに適用することはできません...

あなたはそれが何をすると予想しましたか?テストメソッドを持つクラスに一致するフィルターを探していたのでしょうか?

于 2012-09-04T14:54:28.443 に答える
2

どうでも。私はばかです。

    for (Class<?> testClass : classes) {
        for (Method method : filter(testClass.getClass().getMethods(), isTestMethod)) {

        }
    }
于 2012-09-04T14:54:51.813 に答える