【问题标题】:Get Intellij Idea to highlight incompatible compiler code?获取 Intellij Idea 以突出显示不兼容的编译器代码?
【发布时间】:2015-10-29 14:56:35
【问题描述】:

所以我们遇到了一个问题,javac 可以编译但eclipse can't。这可能是一个javac 错误,但考虑到initial jdk bug 报告已经存在多长时间,我怀疑双方都不会解决问题。

错误是:GenericsEclipseCompilerIssue.CollectionToString 类型中的方法 apply(Collection) 不适用于参数 (Collection)

import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.function.Function;
import java.util.stream.Collectors;

public class GenericsEclipseCompilerIssue
{

    public static <T> Function<Optional<Collection<T>>, String> optionalCollectionToString(
        final Function<? super T, String> elementTransformer ) {
        return (collection) -> {
            return new CollectionToString<>( elementTransformer )
                .apply( collection.orElse( Collections.emptyList() ) );
        };
    }

    static class CollectionToString<E> implements Function<Collection<E>, String> {

        private final Function<? super E, String> elementTransformer;

        public CollectionToString( final Function<? super E, String> elementTransformer )
        {
            this.elementTransformer = elementTransformer;
        }

        @Override
        public String apply( final Collection<E> collection )
        {
            List<String> strings = collection.stream()
                .filter( Objects::nonNull )
                .map( elementTransformer::apply )
                .sorted( String.CASE_INSENSITIVE_ORDER )
                .collect( Collectors.toList() );

            return  strings.toString();
        }
    }
}

有什么方法可以让 Intellij Idea 突出显示这一点,以免我不小心引入这个问题?

【问题讨论】:

  • 您是否选择在日常工作中切换到 Eclipse 编译器?
  • @Makoto 我团队的其他成员正在使用 eclipse,事实上我是唯一一个不使用的人。我们可以争辩说我应该这样做,但是,我个人觉得这无法忍受。
  • 在 IntelliJ 中不使用 Eclipse 编译器是否有特定原因?我不会说你应该使用 Eclipse,但你可以使用它的编译器......
  • @Makoto 我不知道这是可能的,我想一般来说(这可能是为什么)我也不知道你为什么会......如果你想提供可能是一个解决方案一个解释这一点的答案,以及如何。

标签: java eclipse intellij-idea intellij-14


【解决方案1】:

在这种情况下,像罗马人那样做会更有意义。由于每个人都在使用 Eclipse 编译器,因此您也应该使用(至少在该政策决定改变之前)。

为此,在 Settings > Build, Execution and Deployment > Compiler > Java Compiler 下,将设置从 Javac 切换到 Eclipse。现在,IntelliJ 将使用 Eclipse 编译器来构建您的代码。

【讨论】:

  • 所以这是一个不错的答案,但我刚刚意识到它破坏了我的调试器(看不到局部变量),这是不可接受的权衡(是的,我启用了生成调试信息)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-08
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 2015-03-13
相关资源
最近更新 更多