为什么我可以编译这段代码而不会出错:
public class Base<T> {
Base(List<String> list){}
}
class Child extends Base{
Child(){
super(new ArrayList<Integer>());
}
}
Run Code Online (Sandbox Code Playgroud)
但同时我无法编译这个(注意Base<T>
):
public class Base {
Base(List<String> list){}
}
class Child extends Base{
Child(){
super(new ArrayList<Integer>());
}
}
Run Code Online (Sandbox Code Playgroud)
显然,第二个例子中存在"不兼容的类型",但为什么第一个例子中没有错误?它不安全并且可能导致运行时异常,不是吗?
为什么我不能用Java做到这一点:
public class TestClass {
public <T extends TestClass> T test(){
return this; // error here
}
}
Run Code Online (Sandbox Code Playgroud)
据我所知,this
将永远是一个扩展的类的实例TestClass
,为什么编译器不允许上面的代码?即使我会扩展TestClass
当时的类型this
也适合extends TestClass
.我收到以下错误:
错误:(4,16)java:不兼容的类型:TestClass无法转换为T.
我是新来PyQt
的,但我要使用pytest
与pytest-qt
插件来测试我PyQt5
的应用程序。我有一些使用SWTBot
和 的Java GUI 测试经验RCPTT
,在那里我可以实时查看在测试期间控件和整个 GUI 发生的情况。我想用我的新 python 工具有这样的行为,但似乎pytest-qt
以某种背景方式测试 GUI。所有代码都按我的预期工作,但在测试期间我看不到 GUI。代码很简单,如教程中所示:
from tests.test import MyApp
from time import sleep
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
def test_myapp(qtbot):
app = QApplication([])
window = MyApp()
# window.show()
# app.exec_()
qtbot.addWidget(window)
qtbot.mouseClick(window.buttonBox.buttons()[0], Qt.LeftButton)
sleep(5)
assert window.label.text() == 'accept'
Run Code Online (Sandbox Code Playgroud)
如果我取消注释该window.show()
行(他们在教程中这样做),我会看到一个奇怪的窗口,其中包含冻结的背景:
我想理论上可以显示界面,因为我知道 PyQt5 从 python shell ( more ) 工作:
例如,您可以从 Python shell 提示创建小部件,与它们交互,并且仍然能够输入其他 Python 命令 …