gpt4 book ai didi

java - 在java泛型类中将Integer转换为int

转载 作者:行者123 更新时间:2023-12-01 14:03:44 25 4
gpt4 key购买 nike

我刚刚接触 Java(这里是 C++ 的老手),在将类 Integer 转换为原始类型 int 时遇到了一些问题。我已经看到了几种解决方案,但似乎都不起作用。

我的案例的独特之处在于转换发生在泛型类内(整数是泛型参数)。该类扩展了 JProgressBar 并继承了自定义(模板化)接口(interface) TaskObject。

ProgressBar 类的代码:

private class ProgressBar<Integer> extends JProgressBar 
implements TaskObject<Integer> {

@Override
public void update(Integer val) {
System.out.println("pbar updating to " + val);
setValue(val);
}

}

TaskObject 接口(interface)代码:

interface TaskObject<T> {
void update(T value);
}

ProgressBar实例作为TaskObject类型传递到SwingWorker线程并从该线程更新(因此有update()函数)。

不幸的是,setValue 不会采用 Integer 类型,并且使用 (int) 进行转换以及 Integer 类转换方法都会失败。具体的错误在末尾指出“Integer extends object returned in class ...ProgressBar”。

很明显,我使用 Integer 作为通用参数这一事实使编译器在调用 JProgressBar.setValue() 时感到困惑...我对如何解决这个问题有一半的想法,但它看起来工作量很大,收效甚微,所以我想我应该把它扔在那里,看看其他人是否有意见......

最佳答案

private class ProgressBar<Integer> extends JProgressBar 
implements TaskObject<Integer>

这里使用的Integer实际上是定义了一个名为“Integer”的新类型参数,它与java.lang.Integer类无关。

您当前拥有的相当于:

private class ProgressBar<MyTypeVariable> extends JProgressBar 
implements TaskObject<MyTypeVariable> {

@Override
public void update(MyTypeVariable val) {
System.out.println("pbar updating to " + val);
setValue(val);
}

}

由于您想要做的就是使用 java.lang.Integer 作为其类型参数 T 实现 TaskObject 接口(interface),因此定义它如:

private class ProgressBar extends JProgressBar 
implements TaskObject<Integer> {

@Override
public void update(Integer val) {
System.out.println("pbar updating to " + val);
setValue(val);
}

}

现在您可以使用 val 调用 JProgressBar 的 setValue(int) 方法,因为借助自动装箱,编译器将自动转换该值。

关于java - 在java泛型类中将Integer转换为int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19107972/

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