我需要关于Java中的null安全性的建议

我一直在阅读关于java中的beeing null safe的文章,以及如何return null或那个传递null作为参数的错误。 我得到它简化了生活,人们并不总是阅读文档,所以他们不知道方法可以return null ,或者如果null可以传递给它。 注释似乎只是污染了代码,并没有像Kotlin一样的无效安全机制。 在我目前的项目中,我尝试以这种方式设计所有的东西,至少对于最终用户来说几乎是不需要的。 我想创建一个更改监听器(类似javafx.beans.value.ChangeListener ),以便我可以传递一个以前和当前值的changed()方法。 事情是,我希望它是无效的,所以我不想永远传递一个null作为参数,即使它可以从无值改变到某个值,或者从某个值改变为无值。 我可以为这种情况添加两个额外的方法,并有类似的东西: public inteface ChangeListener { void valueSet(T current); void valueChanged(T previous, T current); void valueCleared(T previous); } 这种方法似乎过分。 我也可以使用java.util.Optional作为参数,但增加了额外的装箱: public inteface ChangeListener { void changed(Optional previous, Optional current); } 有更优雅的选择吗? 还是应该强制用户使用某种空对象模式 ? 虽然这会造成需要扩展一些类的问题。 我也可以停止关心,在文档中指定如果使用null ,会发生什么情况,并让用户find所有NullPointerExceptions的来源。

在同一个开发机器上运行许多Netty客户端和服务器

我正在编写一个应用程序,其中客户端和服务器都是使用Netty编写的,而且服务器应该(显然)一次支持许多客户端。 我试图通过创建共享一个EventLoopGroup 1000个客户端来测试它,并在单台机器上运行一切。 最初,我有多个客户端有时由于超时而无法连接。 增加客户端上的SO_TIMEOUT_MILLIS并将SO_BACKLOG设置为服务器上的numberOfClients修复了此问题。 但是,我仍然得到connection reset by peer或 io.netty.channel.AbstractChannel$AnnotatedConnectException: syscall:getsockopt(..) failed: Connection refused: localhost/127.0.0.1:8080 at io.netty.channel.unix.Socket.finishConnect(..)(Unknown Source) Caused by: io.netty.channel.unix.Errors$NativeConnectException: syscall:getsockopt(..) failed: Connection refused … 1 more 在客户端有时(特别是当我增加客户端数量时)。 服务器端LoggingHandler输出似乎没有显示任何尝试从这些通道绑定到客户端端口。 试图使用Nio*而不是Epoll*types也没有帮助。 还有其他选项需要设置,以允许更多的连接(可能在服务器端,如果它真的是拒绝/重置连接)? 为了简化情况,我删除了自己的逻辑,所以客户端只需通过websocket连接并在握手成功后关闭通道。 就我的理解而言,Netty通常不会遇到处理10000个并发的websocket连接的问题, ulimit -n是1000000, ulimit -u是772794,所以两者都不应该成为问题。 这里是代码(在Kotlin中,但是Java的翻译应该是清楚的): package netty import io.netty.bootstrap.Bootstrap import io.netty.bootstrap.ServerBootstrap import io.netty.channel.* import io.netty.handler.codec.http.HttpClientCodec import io.netty.handler.codec.http.HttpObjectAggregator import io.netty.handler.codec.http.HttpServerCodec import io.netty.handler.codec.http.websocketx.WebSocketClientHandshakerFactory […]

准备好使用Android Studio离线安装说明

我是Android开发新手。 我想安装Android工作室,但是我的家里没有互联网连接,但是我的手机上已经有了,所以我可以从手机上下载文件并将其传输到我的电脑,然后安装。 但问题是,当我从Android工作室网站下载Android工作室捆绑3.0(Android工作室),当我运行它显示错误gradle项目同步失败我搜索它,但我不能得到任何解决方案我试图设置环境variables“ Java选项“也试图设置离线工作,并在我的电脑上安装最新的Gradle文件,但我仍然不能让我的Android工作室正常运行,所以我需要帮助,我准备好重新安装Android Studio如有必要。 你不应该说我已经阅读了所有关于离线安装和gradle错误的相关问题,但没有用于我,所以请不要垃圾邮件我的问题。 如果你能帮助我,请告诉我,因为我需要Android工作室学习Android编程也Kotlin支持,所以你的帮助将不胜感激。

Spring引导启动缓慢的树莓PI

使用Spring Boot 2作为一个IoT应用程序,我注意到Spring的启动时间过于缓慢。 该平台是一个树莓派2B – 当然,这将是比电脑显着慢。 对于正常的代码执行,我测量一个20倍到50倍的差异。 春季开机启动时间在我的电脑(Win10的x64):5秒 在PI(Ubuntu Server,运行jar的docker中的ARM java)上启动Spring启动时间:11分钟 如果我使用我曾经测量过的最高的因子(50x),我预计会看到启动时间少于当前状态的一半。 到目前为止,我尝试过: 从自动配置中排除依赖关系(现在最小,只有spring-boot-starter-web,kotlin,spoow,webflux,reactor和kafka) 在DEBUG上进行日志记录,看看安静时期发生了什么事情(大部分的bean都被设置好了,没有什么可疑的,尽管一些bean需要几秒钟才能加载) ARM上不同的Docker镜像(无效) CPU一直在100%,内存在20%左右,并有足够的磁盘空间 我的初步结论是加载豆吃所有的CPU周期。 我想,初始化一个bean不应该花几秒钟,但它确实。 这里可能是什么瓶颈? 我可以让Spring以任何方式加载更快吗? 这是PC的输出的第一部分: 2018-01-06 13:43:03.462 INFO 9144 — [ main] cebBasestationApplicationKt : Starting BasestationApplicationKt on GPC with PID 9144 (C:\Data\Code\exmatina\git\basestation\out\production\classes started by Guido in C:\Data\Code\exmatina\git) 2018-01-06 13:43:03.471 INFO 9144 — [ main] cebBasestationApplicationKt : The following […]

JSONRequest成功后的Android更新视图

我正在构建一个Android应用程序(我正在使用Kotlin而不是JAVA,但是如果你能让我的Java方法很好),它应该使用OpenWeather API显示天气信息。 我已经设定了观点: 然后我有另一个类负责提出请求并单独更改每个字段,如下所示: public fun getCityInfo(name: String){ val URI = String.format(“http://api.openweathermap.org/data/2.5/weather?q=%s&appid=”, name) Log.d(“uri”, URI) var cityName: String = “” queue.add(JsonObjectRequest( URI, null, { cityName = it.getString(“name”) var main = it.getJSONObject(“main”) var temp: Double = main.getDouble(“temp”) //getting the rest of the info //I save the info that I need in a class var currTemp = […]

如何使用kotlin来定义一个android应用程序类?

这是我的代码: object MyApplication : Application() { override fun onCreate() { super.onCreate() initOkHttp() } } 当我在AndroidManifest声明MyApplication时,它发生has no default constructor ,任何人都可以帮助我吗? 在这里输入图像说明

如果可能完成,则将Maybe从另一个源转换为单个

我想建立一个Repository类,返回一个Single 。 该类首先应该查找返回Maybe的Cache ,如果Maybe完成了我的Service ,返回Single interface Cache { fun getSomething(): Maybe } interface Service { fun getSomething(): Single } class Repository ( private val cache: Cache, private val service: Service ) { fun getSomething(): Single { return cache.getSomething() .????(feed.getSomething()) //onCompleteTransformToSingle() or similar } } 我已经通过JavaDoc进行了搜索,但是似乎并不存在这种情况下的变换器。 有处理这个好方法吗?

动态投入Kotlin

我想通过使用KClass ,具有一个KClass和一个Any实际为Int的Any为Int 。 fun cast(any: Any, clazz: KClass): T = clazz.java.cast(any) cast(0, Int::class) 但是,我得到这个错误。 java.lang.ClassCastException:无法将java.lang.Integer转换为int 你知道任何解决方案,除了any as Int ?

以Java计算能力

在Java中有没有其他的方式来计算一个整数的幂? 我现在使用Math.pow(a,b),但是它返回一个double,这通常是很多工作,并且当你只想使用整数时看起来不那么干净(一个权力总是会产生一个整数) 。 Python中有没有像Python那样简单的东西?

如何在应用程序关闭时启动服务

我想在应用程序关闭时启动服务。 java代码 public class AudioRecorder extends Service { public static final String SENDER_ID = “274211616343”; @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { Toast.makeText(this, ” MyService Created “, Toast.LENGTH_LONG).show(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, ” MyService Started”, Toast.LENGTH_LONG).show(); return START_STICKY; } […]