小编IAR*_*ARI的帖子

Kotlin类委托覆盖的意外行为

根据我的理解,班级代表团应该这样做

允许对象组合实现与继承相同的代码重用.[维基百科]

Kotlin支持类委派,并在文档中注明以下声明:

覆盖按预期工作:编译器将使用覆盖实现而不是委托对象中的覆盖实现.

考虑到这一点,请考虑以下最小示例:

interface A {
  val v: String

  fun printV() {
    Logger.getLogger().info(Logger.APP, "A", v)
  }
}

class AImpl : A {
  override val v = "A"
}

class B(a: A) : A by a {
  override val v: String = "B"
}
Run Code Online (Sandbox Code Playgroud)

我预计B(AImpl()).printV()会打印B,但是它打印A,即它使用默认的实现AImpl.

此外,如果我printV()使用super实现覆盖B中的方法,即

class B(a: A) : A by a {
  override val v: String = "B"
  override fun printV() { …
Run Code Online (Sandbox Code Playgroud)

delegation kotlin

3
推荐指数
1
解决办法
279
查看次数

使用 PyQt 闪烁小部件

我只是想让 QDialog 中的一些元素闪烁(改变背景颜色)。

现在最好我希望能够使用已经存在的东西并封装闪烁状态,即使用 css3 闪烁,或者可能使用QPropertyAnimation?

由于我没有找到有关该选项的任何好的信息,因此我尝试了不太理想的解决方案:

对话摘录__init__

self.timer = QTimer()
self.timer.timeout.connect(self.update_blinking)
self.timer.start(250)
self.last_blinked = None
Run Code Online (Sandbox Code Playgroud)

def update_blinking(self):
    self.frame.setStyleSheet(
        self.STYLE_BLINK_ON if self.blink else self.STYLE_BLINK_OFF)
    self.blink = not self.blink
Run Code Online (Sandbox Code Playgroud)

其中STYLE_BLINK_ONSTYLE_BLINK_OFF是一些指定背景颜色的 css。那行得通,但是

  1. 我觉得它超级丑,感觉就像 90 年代的代码
  2. 它不可用,因为频繁的样式更新会中断按钮点击。

2. 解释:假设应该闪烁的小部件是一个框架。当单击该框架内的按钮时,clicked如果在释放鼠标按钮之前发生框架的样式更新,则不会发出信号。

一个完全不同的解决方案,它封装了一些东西,不需要我手动启动一个计时器,当然是首选。但是,如果有人至少提出解决第 2 点的解决方案,我将不胜感激。

python qt pyqt

2
推荐指数
1
解决办法
5213
查看次数

@ControllerAdvice 不处理异常

我正在使用 Spring Boot 1.5.9 来开发我的应用程序。我需要实现 jwt 身份验证,并且我使用了 jjwt 库。以下代码来自我的自定义身份验证安全过滤器,它继承自OncePerRequestFilter. 在这里,我尝试从令牌解析用户名,当自动解析用户名时,会进行 jwt 验证,并检查令牌的过期时间。我调试它并且它有效,所以接下来我想向客户端应用程序发送正确的消息,说明身份验证失败的原因。我想抛出一个 ExpiredJwtException 并使用格式化输出的控制器建议来处理它。

这是异常抛出:

try {
    username = jwtTokenService.getUsername(authToken);
} catch (IllegalArgumentException e) {
    logger.error("an error occured during getting username from token", e);
} catch (ExpiredJwtException e) {
    logger.warn("the token is expired and not valid anymore", e);
    throw new ExpiredJwtException(e.getHeader(), e.getClaims(), e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器建议,JwtException 是 ExpiredJwtException 的基类,我抛出它,所以它应该可以工作。我也尝试在ExceptionHandler中直接使用ExpiredJwtException,但效果不佳。接下来我想用同样的方式处理另一个异常。

@ControllerAdvice
public class GlobalControllerExceptionHandler {

    @ExceptionHandler(Exception.class)
    public @ResponseBody
    ResponseEntity<Map<String, Object>> handleException(Exception ex) {
        Map<String, Object> errorInfo = new HashMap<>();
        errorInfo.put("message", …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

2
推荐指数
1
解决办法
2万
查看次数

如何在类构造函数中调用泛型类型的构造函数

我想创建具有以下属性的Matrix2D类:

  1. 类应该是通用的
  2. 应该能够接受尽可能多的类型(理想情况下是所有类型)
  3. “默认”构造函数应使用默认类型值初始化所有单元格
  4. 正确处理大小写,当类型没有默认构造函数时(可能是默认参数解决了此问题)

我该怎么做?这是我的草图:

class Matrix2D<T> : Cloneable, Iterable<T> {
    private val array: Array<Array<T>>
    // Call default T() constructor if it exists
    // Have ability to pass another default value of type
    constructor(rows: Int, columns: Int, default: T = T()) {
        when {
            rows < 1 -> throw MatrixDimensionException("Number of rows should >= 1")
            columns < 1 -> throw MatrixDimensionException("Number of columns should be >= 1")
        }
        array = Array(rows, { Array(columns, { default }) }) …
Run Code Online (Sandbox Code Playgroud)

generics kotlin

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

标签 统计

kotlin ×2

delegation ×1

generics ×1

java ×1

pyqt ×1

python ×1

qt ×1

spring ×1

spring-boot ×1