-2

我对 Java 11 (OpenJDK) 有一个奇怪的编译错误:

找不到符号:方法 not(java.util.function.Predicat<java.lang.Class>) 位置:接口 java.util.function.Predicate

Intellij Idea 没有显示任何警告或错误......可能有什么问题?强制转换为 Predicate<Class> 并使 Idea 的缓存无效并没有帮助。

    public class ConditionForBean implements Condition {
        @FunctionalInterface
        private interface NoException<T, R> {
            R apply(T t) throws Exception;
        }
        private static Function<String, Class> runtimeOf(NoException<String, Class> f) {
            return (str) -> {
                try {
                    return f.apply(str);
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            };
        }

        @Override
        public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
            String[] beanNames = conditionContext.getBeanFactory().getBeanDefinitionNames();
            return Arrays.stream(beanNames)
                    .map(conditionContext.getBeanFactory()::getBeanDefinition)
                    .map(BeanDefinition::getBeanClassName)
                    .map(runtimeOf(Class::forName))
                    .filter(Predicate.not(ConditionalBean.class::equals)) // error
                    .map(Class::getInterfaces)
                    .noneMatch(interfaces -> Arrays.asList(interfaces).contains(Excludable.class));
        }
    }
4

1 回答 1

3

这个问题太愚蠢了......我有

<build>
 <plugins>
  <plugin>
   <artifactId>maven-compiler-plugin</artifactId>
   <configuration>
    <source>1.9</source>
    <target>1.9</target>
   </configuration>
  </plugin>
 </插件>
</build>

在 pom.xml 中,将 1.9 替换为 1.11 后它已经消失了。

于 2018-10-14T16:04:24.873 回答