在Java中,是否有可能强制某个类具有一组特定的子类而没有其他子类?例如:
public abstract class A {}
public final class B extends A {}
public final class C extends A {}
public final class D extends A {}
Run Code Online (Sandbox Code Playgroud)
我可以以某种方式强制执行不能创建A的其他子类吗?
抱歉标题不好,但我想不出更好的一个.
我有一个A类和一个B类,它是A的一个子类,就像这样:
(它实际上是否有正确的名称?是否为继承保留"子类"?)
class A {
int i = 0;
class B {
int j = 1;
}
}
class Test {
public static void main() {
A a = new A();
B b = a.new B();
A c = ??? b ??? // get "a" back
}
}
Run Code Online (Sandbox Code Playgroud)
从B可以访问A的每个属性,因此ai和bi都返回0.现在,我想知道是否有可能从b中检索A类型的原始对象,因为b包含a包含的所有内容?简单的铸造显然不能解决问题.
第二个:
class A {
void print() {
System.out.println("This is class A.");
}
class B {
void print() {
// <--- How to access print() of class A (like this.A.print() or …Run Code Online (Sandbox Code Playgroud) 我正在使用CodeDomProvider,CompilerInfo和CompilerParameters在运行时编译一些C#和VB代码.它工作得很好,我真的希望能够为我的应用程序添加脚本支持,但它似乎只支持.NET 2.0语法.例如,C#不支持var关键字,VB中不支持If(bool,string,string)表达式.
我怎么能告诉它以3.5框架为目标?
是否可以根据鼠标的最后位置和当前位置获取鼠标方向(左,右,上,下)?我已经编写了代码来计算两个向量之间的角度,但我不确定它是否正确.
有人可以指出我正确的方向吗?
public enum Direction
{
Left = 0,
Right = 1,
Down = 2,
Up = 3
}
private int lastX;
private int lastY;
private Direction direction;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
lastX = e.X;
lastY = e.Y;
}
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
double angle = GetAngleBetweenVectors(lastX, lastY, e.X, e.Y);
System.Diagnostics.Debug.WriteLine(angle.ToString());
//The angle returns a range of values from -value 0 +value
//How to get the direction from the angle?
//if (angle > ??) …Run Code Online (Sandbox Code Playgroud) 有时,我们的OpenERP用户希望对核心OpenERP模块中的字段进行小的更改.例如,他们希望产品屏幕的Rack,Row和Case字段长度超过16个字符.
我是否可以在不更改声明它的模块的情况下更改现有字段?我宁愿使用我们自己的自定义模块进行更改,而不是编辑product模块本身.
通常,当我为 Django 项目编写测试时,我必须编写比实际测试被测对象更多的代码来设置数据库记录。目前,我尝试使用测试装置来存储相关字段,但是我可以使用模拟对象来模拟需要大量工作来设置的相关表吗?
这是一个简单的例子。我想测试一个Person对象是否会spawn()根据其健康状况生成子对象。
在这种情况下,一个人的城市是必填字段,所以我必须先设置一个城市,然后才能创建一个人,尽管城市与该spawn()方法完全无关。我怎样才能简化这个测试而不需要创建一个城市?(在一个典型的示例中,不相关但必需的设置可能是数十或数百条记录,而不仅仅是一条。)
# Tested with Django 1.9.2
import sys
import django
from django.apps import apps
from django.apps.config import AppConfig
from django.conf import settings
from django.db import connections, models, DEFAULT_DB_ALIAS
from django.db.models.base import ModelBase
NAME = 'udjango'
def main():
setup()
class City(models.Model):
name = models.CharField(max_length=100)
class Person(models.Model):
name = models.CharField(max_length=50)
city = models.ForeignKey(City, related_name='residents')
health = models.IntegerField()
def spawn(self):
for i in range(self.health):
self.children.create(name='Child{}'.format(i))
class Child(models.Model):
parent = models.ForeignKey(Person, related_name='children')
name = …Run Code Online (Sandbox Code Playgroud) 我试图在我的 PySide2 应用程序中打开一个文件,但文件对话框总是在主窗口下方打开,并在启动器中显示为另一个应用程序。应用程序的名称是“门户”。
我看到其他答案,其中解决方案是将主窗口作为第一个参数传递给getOpenFileName(),但这对我不起作用。
这是问题的简单演示:
import sys
from PySide2.QtWidgets import QPushButton, QFileDialog, QApplication
class DemoButton(QPushButton):
def __init__(self, text):
super().__init__(text)
self.clicked.connect(self.on_click)
def on_click(self):
file_name, _ = QFileDialog.getOpenFileName(
self,
"Open a text file.",
filter='Text file (*.txt)')
print(file_name)
def main():
app = QApplication(sys.argv)
button = DemoButton("Hello World")
button.show()
app.exec_()
sys.exit()
main()
Run Code Online (Sandbox Code Playgroud)
我想也许父母必须是一个QMainWindow,所以我试过:
import sys
from PySide2 import QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
main_widget = QtWidgets.QWidget(self)
self.setCentralWidget(main_widget)
# layout initialize
g_layout = QtWidgets.QVBoxLayout()
layout = …Run Code Online (Sandbox Code Playgroud) 当我升级到 PySide6 6.2.2 时,MyPy 开始抱怨Qt.AlignmentFlag. 这是一个小例子:
from PySide6.QtGui import Qt
from PySide6.QtWidgets import QLabel, QApplication
app = QApplication()
label = QLabel("Hello, World!")
label.setAlignment(Qt.AlignCenter)
label.show()
app.exec()
Run Code Online (Sandbox Code Playgroud)
仍然运行良好,但 MyPy 抱怨:
$ mypy foo.py
foo.py:6: error: Argument 1 to "setAlignment" of "QLabel" has incompatible type "AlignmentFlag"; expected "Alignment"
Found 1 error in 1 file (checked 1 source file)
$
Run Code Online (Sandbox Code Playgroud)
好的,我尝试将 转换AlignmentFlag为Alignment.
from PySide6.QtGui import Qt
from PySide6.QtWidgets import QLabel, QApplication
app = QApplication()
label = QLabel("Hello, World!") …Run Code Online (Sandbox Code Playgroud) 我遵循了dnd kit React 库的快速入门,它让我可以用鼠标很好地拖放。但是,当我尝试在 Android 上使用 Chrome 的同一页面时,我无法拖动该项目。看起来它开始移动,然后当我的手指移出其原始边界时就被卡住了。
我尝试切换到拖动叠加,但这似乎没有任何区别。
如何使用 dnd 套件支持触摸用户?