小编Dan*_*iel的帖子

Java类型推断何时产生无限类型?

JLS在类型推断算法(第15.12.2节)中提到:

上述过程有可能产生无限类型.这是允许的,Java编译器必须识别这种情况并使用循环数据结构恰当地表示它们.

但是,我无法找到javac生成无限类型的实际示例.我认为在下列情况下应该产生一个:

<T> T pick(T a, T b) { ... }

pick("string", 3);
Run Code Online (Sandbox Code Playgroud)

String和Integer都是Comparable <themselve>,因此它们的常用超类型应该是Comparable<? extends Comparable<? extends Comparable<? ...>>>(无限的).

我可以:

Comparable<? extends Comparable<?>> x = pick("string", 3);
Run Code Online (Sandbox Code Playgroud)

但后来我试过了:

Comparable<? extends Comparable<? extends Comparable<?>>> x = pick("string", 3);
Run Code Online (Sandbox Code Playgroud)

这不编译.似乎递归在两个步骤后中止.

您是否知道Java实际上会产生无限类型?

-

编辑:似乎以上是编译器错误.阅读规范,让我们看看如何计算lub(String, Integer):

ST(String) = { String, Comparable<String>, Serializable, CharSequence, Object }
ST(Integer) = { Integer, Comparable<Integer>, Serializable, Number, Object }
EC = { Comparable, Serializable, Object }
MEC = { Comparable, Serializable }
Inv(Comparable) …
Run Code Online (Sandbox Code Playgroud)

java programming-languages type-inference wildcard

11
推荐指数
1
解决办法
653
查看次数

Tablet PC输入面板不会导致TextInput事件?

我有一个消耗WPF TextInput事件的自定义控件.这在使用键盘时工作正常; 但是,如果使用"Tablet PC输入面板"(Windows 7附带)的手写识别,单击"插入"按钮时不会发生TextInput事件.

public partial class Window1 : Window
{
    public Window1()
    {
    }

    protected override void OnTextInput(TextCompositionEventArgs e)
    {
        base.OnTextInput(e);
        this.Title = e.Text;
    }
}

class Text : Control
{
    static Text()
    {
        KeyboardNavigation.IsTabStopProperty.OverrideMetadata(
            typeof(Text), new FrameworkPropertyMetadata(true));
        KeyboardNavigation.TabNavigationProperty.OverrideMetadata(
            typeof(Text), new FrameworkPropertyMetadata(KeyboardNavigationMode.None));
        FocusableProperty.OverrideMetadata(
            typeof(Text), new FrameworkPropertyMetadata(true));
    }

    public static readonly DependencyProperty EnteredTextProperty =
        DependencyProperty.Register("EnteredText", typeof(string), typeof(Text),
                                    new FrameworkPropertyMetadata());

    public string EnteredText {
        get { return (string)GetValue(EnteredTextProperty); }
        set { SetValue(EnteredTextProperty, value); }
    }

    protected override void OnTextInput(TextCompositionEventArgs e) …
Run Code Online (Sandbox Code Playgroud)

c# wpf textinput

6
推荐指数
1
解决办法
1278
查看次数

Application.Idle事件未在WPF应用程序中触发

我正在使用第三方Windows窗体控件,使用Application.Idle事件执行一些"延迟"操作.

现在我们将应用程序移动到WPF,这些操作停止了.我发现没有按预期引发System.Windows.Forms.Application.Idle事件.

如何在WPF应用程序中触发Idle事件,以便我可以继续使用该第三方控件(在WindowsFormsHost中)?这是不是可以修改Windows窗体控件.

wpf windowsformshost winforms

5
推荐指数
1
解决办法
8959
查看次数