gpt4 book ai didi

java - 三元条件运算符中的不兼容类型

转载 作者:太空宇宙 更新时间:2023-11-04 13:18:33 24 4
gpt4 key购买 nike

我正在尝试根据特定条件为下拉框设置自定义渲染器:

themeComboBox.setRenderer(
settings == null ? themeComboBox.getRenderer() : new ThemeNameRenderer());

哪里themeComboBoxjavax.swing.JComboBox<Path> 的一个实例,和ThemeNameRenderer是一个扩展 DefaultListCellRenderer 的自定义类.

无法编译,出现以下错误

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

如何使用条件运算符使其工作?

<小时/>
  • 我无法将调用转至 setRenderer使用 if 语句或类似语句,因为我正在通过 NetBeans GUI 编辑器自定义代码。事实上,我需要这样做的全部原因是 ThemeNameRenderer使用在编辑器中设计 GUI 时不应加载的依赖项。

  • 我的目标是 Java 1.7。我认为代码确实可以在 Java 1.8 上编译。

  • 我发现以下代码确实有效,但我希望尽可能避免使用额外的方法。

    themeComboBox.setRenderer(pickRenderer());

    private ListCellRenderer<? super Path> pickRenderer() {
    if (settings == null) {
    return themeComboBox.getRenderer();
    } else {
    return new ThemeNameRenderer();
    }
    }

最佳答案

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

检查此页面中的“目标类型”部分:

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

The notion of what is a target type has been expanded to include method arguments

对于我来说,使用 Java 1.7 可以很好地编译此代码(需要添加强制转换):

themeComboBox.setRenderer(
(ListCellRenderer<? super Path>) (settings == null ? themeComboBox.getRenderer() : new ThemeNameRenderer()));

并且您的原始代码使用 Java 1.8 可以很好地编译:

themeComboBox.setRenderer(
settings == null ? themeComboBox.getRenderer() : new ThemeNameRenderer());

关于java - 三元条件运算符中的不兼容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33322788/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com