首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >三值条件算子中的不相容类型

三值条件算子中的不相容类型
EN

Stack Overflow用户
提问于 2015-10-24 20:09:03
回答 1查看 2K关注 0票数 1

我试图根据特定条件为下拉框设置自定义呈现器:

代码语言:javascript
复制
themeComboBox.setRenderer(
    settings == null ? themeComboBox.getRenderer() : new ThemeNameRenderer());

其中themeComboBoxjavax.swing.JComboBox<Path>的一个实例,ThemeNameRenderer是扩展DefaultListCellRenderer的自定义类。

这不编译,有以下错误

代码语言:javascript
复制
method setRenderer in class JComboBox<E> cannot be applied to given types;
    themeComboBox.setRenderer(settings == null ? themeComboBox.getRenderer() : new ThemeNameRenderer());
  required: ListCellRenderer<? super Path>
  found: ListCellRenderer<CAP#1>
  reason: actual argument ListCellRenderer<CAP#1> cannot be converted to ListCellRenderer<? super Path> by method invocation conversion
  where E is a type-variable:
    E extends Object declared in class JComboBox
  where CAP#1 is a fresh type-variable:
    CAP#1 extends Object from capture of ? extends Object

如何使用条件运算符?

  • 我不能用if语句或类似的语句包围对setRenderer的调用,因为我正在通过NetBeans GUI编辑器定制代码。事实上,我需要这样做的全部原因是ThemeNameRenderer使用了在编辑器中设计GUI时不应该加载的依赖项。
  • 我的目标是Java 1.7。我认为代码确实是在Java1.8上编译的。
  • 我发现下面的代码确实有效,但如果可能的话,我想避免使用额外的方法。 themeComboBox.setRenderer(pickRenderer());私有ListCellRenderer<?超级Path> pickRenderer() { if ( == null) {返回themeComboBox.getRenderer();}{返回新的ThemeNameRenderer();}}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-24 20:20:12

他们似乎为Java 8中的类型推断增加了一些改进,这可能解释了行为上的差异。

请查看本页中的“目标类型”部分:

https://docs.oracle.com/javase/tutorial/java/generics/genTypeInference.html

什么是目标类型的概念已经扩展到包括方法参数。

使用Java1.7(需要添加强制转换),这段代码对我来说编译得很好:

代码语言:javascript
复制
themeComboBox.setRenderer(
            (ListCellRenderer<? super Path>) (settings == null ? themeComboBox.getRenderer() : new ThemeNameRenderer()));

您的原始代码使用Java 1.8进行了很好的编译:

代码语言:javascript
复制
themeComboBox.setRenderer(
            settings == null ? themeComboBox.getRenderer() : new ThemeNameRenderer());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33322788

复制
相关文章

相似问题

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