小编Chr*_*ght的帖子

Java中是否存在不受支持的操作注释?

java中是否有任何注释将方法标记为不受支持?例如,假设我正在编写一个实现java.util.List接口的新类.此接口中的add()方法是可选的,我在实现中不需要它们,因此我要执行以下操作:

public void add(Object obj) {
   throw new UnsupportedOperationException("This impl doesn't support add");
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,有了这个,直到运行时才会发现事实上,这个操作不受支持.

理想情况下,这可能是在编译时捕获的,这样的注释(例如,可能 @UnsupportedOperation)会轻率地向这个方法的任何用户说"嘿,你正在使用不支持的操作",就像使用@Deprecated标志Eclipse一样突出显示已弃用项目的任何用途.

java annotations

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

LocationManager的getLastKnownLocation有多可靠,它的更新频率如何?

我正在构建一个可以在某些操作中使用用户当前位置的应用程序.位置更有利于用户,而不是流程的关键部分.我只对非常粗略的准确性感兴趣,它可能会偏离5英里甚至10英里,仍然具有价值.一般计划是查看网络提供商是否已启用,然后才开始执行

locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)
Run Code Online (Sandbox Code Playgroud)

假设没有其他应用程序正在运行,手机会自动定期更新网络位置吗?即,这个代码可能总会返回一个符合我需求的值?

编辑:

我一直在做更多的研究,我认为我在这里问的问题是,如果手机锁定在不同的手机信号塔上,Android操作系统或手机本身会更新网络提供商的最后一个已知位置或wifi网络.答案似乎是否定的.强制停止手机上我知道与位置服务交互的所有应用程序后,最后一个已知位置已停止更新.所以,我猜这些天有可能大多数手机都会在后台运行一些位置服务来更新最后一个已知位置,但手机本身不会这样做.因此,如果最后一个已知位置太旧,我想我会采用某种形式的请求位置更新.

android geolocation

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

为什么使用随机数作为串行版UID?

编辑:随机我的意思是一个大的计算数字,对我们作为开发人员没有语义含义

实现Serializable接口时,最佳做法是指定串行版本UID非常重要.在很多地方,我经常看到使用随机数字.例如

Effective Java(第2版)第312页:

private static final long serialVersionUID = 234098243823485285L;
Run Code Online (Sandbox Code Playgroud)

从Java 6中的String类:

private static final long serialVersionUID = -6849794470754667710L;
Run Code Online (Sandbox Code Playgroud)

从Java 6中的ArrayList类:

private static final long serialVersionUID = 8683452581122892189L;
Run Code Online (Sandbox Code Playgroud)

甚至eclipse提供了生成这些随机数的选项(尽管主要的默认值似乎是生成serialVersionUID 1L)

为什么要使用随机数?从1L开始并且当它像任何合理的版本控制一样变化时增加到2L是不是更有意义?我唯一能想到使用看似随机的数字的方法是,如果您没有指定serialVersionUID,并且现在想要这样做(这会将您绑定到运行时自动生成的版本以提供向后兼容性支持).

java serialization

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

掌握Google Guice

我刚刚开始使用Google Guice作为依赖注入框架,并试图将其改造为我最近写的一个中小型项目.我理解Guice如何工作的基础知识,但对于一些方法细节我有点模糊.例如:

1)模块用于定义绑定,然后将其输入喷射器.您是否倾向于将所有内容放入一个模块中,或者您是否倾向于将内容分解为许多较小的模块?

2)您是否在顶层有一个注射器注入整个对象树或多个点状注射器,只注入您真正需要注入的依赖关系?我在想我自己的代码库,当然,它有许多依赖项,但在测试期间我只需要控制一小部分.

3)我稍微坚持使用仅测试环境模块而不是生产版本来获得系统/集成测试的最佳方法.这个问题可能是特定于实现的,但我很好奇人们使用什么方法.作为参考,我的应用程序是基于servlet的Web应用程序.

还有其他指针吗?

java guice

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

Eclipse可以自动生成第三方库类的接口吗?

我正在Apache commons网络库中使用Apache的FTPClient类.遗憾的是,它没有为大多数功能实现接口,这使得使用它的测试类变得棘手.所以,我以为我会创建自己的类来封装这个并实现一个接口.无论如何那是背景.我的问题是,在Eclipse中是否可以生成一个接口(类似于Refactor-> Extract Interface),但是对于坐在jar文件中的第三方代码?

为了澄清,我不是在寻找FTPClient现在实现新接口,而是创建一个模仿与FTPClient相同的公共API的接口.然后我可以创建自己的类来实现这个接口并封装FTPClient.

java eclipse interface extract

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

究竟什么是可用于垃圾收集的对象?

我正在与我的应用程序争夺内存问题,并试图了解垃圾收集.如果我有以下代码:

public void someMethod() {
   MyObject myObject = new MyObject();
   myObject.doSomething();  //last use of myObject in this scope
   doAnotherThing();
   andEvenMoreThings();
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,myObject垃圾收集可用myObject.doSomething()于此对象的最后一次使用,还是在它完成someMethod()范围之后?即垃圾收集足够聪明,虽然局部变量仍在范围内,但其余代码不会使用它?

java garbage-collection

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

如何获取android应用程序窗口的大小而不是物理屏幕大小?

在Android中,如何获得应用程序窗口的大小?我不是在寻找物理屏幕大小,而是在屏幕上查看应用程序窗口的实际大小.例如,一般在你拿走通知栏,软触按钮等后剩下的东西.

android dimensions

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

删除或注释掉非工作的JUnit测试?

我目前正在为遗留应用程序构建CI构建脚本.有可用的零星JUnit测试,我将把所有测试的JUnit执行集成到CI构建中.但是,我想知道如何处理我在非维护的JUnit测试中遇到的100'失败.我是:

1)评论它们,因为它们似乎在其中具有合理的,如果没有维护的业务逻辑,希望有人最终取消注释并修复它们

2)删除它们,因为不太可能有人会修复它们,注释掉的代码只会被忽略或者变得杂乱无章

3)追踪那些把这个烂摊子留在我手中的人,并用代码的打印件将其打在头上(由于长方法气味将足以适合任务),同时宣扬维护良好的和单元测试代码库

java legacy junit continuous-integration

8
推荐指数
2
解决办法
2383
查看次数

有什么理由不总是记录堆栈跟踪?

今天在我们的应用程序中遇到了令人沮丧的问题,这个问题归结为ArrayIndexOutOfBounds异常被抛出.异常的类型只是所记录的所有内容,这是相当无用的(但是,哦,亲爱的遗留应用程序,我们仍然爱你,大多数).我已经重新部署了应用程序,其中的更改记录了异常处理中的堆栈跟踪(并立即找到了问题的根本原因),并想知道为什么之前没有其他人这样做过.您是否通常记录堆栈跟踪,是否有任何理由不这样做?

如果你能解释(为什么,不是如何)在java中跳跃箍以获得堆栈跟踪的字符串表示的理由,那么奖励积分!

java logging stack-trace

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

尝试写入文件时出现FileNotFound异常

好吧,我觉得这应该很容易,但显然缺少用Java编写文件的基本内容.我有这个:

File someFile = new File("someDirA/someDirB/someDirC/filename.txt");
Run Code Online (Sandbox Code Playgroud)

我只是想写信给文件.但是,虽然someDirA存在,但someDirB(因此someDirC和filename.txt)不存在.这样做:

BufferedWriter writer = new BufferedWriter(new FileWriter(someFile));
Run Code Online (Sandbox Code Playgroud)

抛出一个FileNotFoundException.好吧,呃,不开玩笑.毕竟我正在努力创造它.我是否需要将文件路径分解为组件,创建目录,然后在实例化FileWriter对象之前创建文件?

java exception file filenotfoundexception

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