我正在尝试编写一个通用的基本活动,它指定它的ViewModel类型是一个通用参数:
abstract class BaseActivity<T : ViewModel> : AppCompatActivity()
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试为我的ViewModel编写一个惰性初始化属性:
val viewModel by lazy { ViewModelProviders.of(this, getFactory()).get(T) }
Run Code Online (Sandbox Code Playgroud)
显示的错误是 Type Parameter T is not an expression
也使用::class或::class.java没有帮助.有谁能解释这个问题?
编辑:我试图使用这样的内联函数:
inline fun <reified T : ViewModel?> AppCompatActivity.obtainViewModel(factory: ViewModelProvider.Factory): T {
return ViewModelProviders.of(this, factory).get(T::class.java)
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
abstract class BaseActivity<T> : AppCompatActivity() {
val viewModel by lazy { obtainViewModel<T>(getFactory())
}
Run Code Online (Sandbox Code Playgroud)
现在我得到错误,T不能用作具体参数.
EDIT2:到目前为止最好的解决方案似乎是:链接,但它在每个扩展类中实现抽象标记的开销.
我有一个 MQTT 客户端想要订阅以下主题
当然,我有多个节点,所以我必须使用通配符,如下所述: https: //www.hivemq.com/blog/mqtt-essentials-part-5-mqtt-topics-best-practices/
我尝试了以下主题名称
使用上述表达式 1 和 2,我没有收到主题 node1/data 的消息。
有没有办法通过单个订阅来做到这一点?
我在 Spring 中使用 HiveMQ MQTT 客户端来接收 MQTT 消息。
我的客户端配置如下
public Mqtt3AsyncClient mqtt3Client() {
var mqtt3Client = Mqtt3Client.builder()
.serverHost("my.host")
.sslWithDefaultConfig()
.serverPort(0000)
.automaticReconnectWithDefaultConfig()
.buildBlocking();
mqtt3Client.connect();
return mqtt3Client.toAsync();
}
Run Code Online (Sandbox Code Playgroud)
客户端可用后,使用该客户端初始化另一个 Spring Bean。它订阅了一个主题:
@PostConstruct
public void subscribeTopic() {
mqtt3AsyncClient.subscribeWith()
.topicFilter("topicfilter")
.qos(MqttQos.AT_LEAST_ONCE)
.callback(message -> {
/*Handle message*/
})
.send()
.whenComplete((mqtt3SubAck, throwable) -> {
if (throwable != null) {
/*Logging*/
} else {
/*Logging*/
}
});
}
Run Code Online (Sandbox Code Playgroud)
我多次看到没有更多消息传递到我的应用程序,而我仍然能够使用客户端连接发送消息(因此当时它已连接)。
我找不到任何有关 HiveMQ MQTT 客户端如何处理配置的automaticReconnectWithDefaultConfig(). 谁能指出,我创建的订阅是否subscribeTopic()被重新订阅?addSubscription()我还找到了可以更换零件的方法.topicFilter(..).qos(...)。我也找不到任何信息这是否使订阅对连接丢失更具弹性。
我很感激有关该主题的任何信息。
谢谢。
我有一个简单的 docker 文件
FROM ubuntu:14.04
USER root
RUN apt-get update && sudo apt-get -y install openvpn
COPY . /tmp
Run Code Online (Sandbox Code Playgroud)
在哪里 。包含有关 VPN 连接的所有必要信息(ovpn 文件、ca 文件、用户证书和密钥)。
通过构建并运行容器docker run -it --device=/dev/net/tun,然后更改为 /tmp 目录并执行,sudo openvpn config.ovpn出现以下错误:
Fri Aug 23 06:15:21 2019 ERROR: Cannot ioctl TUNSETIFF tun: Operation not permitted (errno=1)
Run Code Online (Sandbox Code Playgroud)
[编辑] 通过 OpenVPN GUI 启动 .ovpn 配置工作正常。
有什么建议吗?
谢谢。
我在IntelliJ和Gradle v5.3中有一个Kotlin-Micronaut v.1.0.2项目。我正在运行的应用程序例如具有以下控制器:
@Controller("/api/test")
class TestController {
@Get
fun helloWorld() = "Hello World"
}
Run Code Online (Sandbox Code Playgroud)
如果我更改了这些代码中的任何一个,例如更改了返回值或添加了另一个REST方法(例如POST),则必要的代码只会在上生成./gradlew clean build。在IntelliJ中单击“运行”将不会为我生成必要的终结点(例如,添加POST终结点并尝试对其进行卷曲时,在清理构建之前会得到“不允许使用方法”)。
你有什么建议吗?