Tag: java

为什么父类和子类都实现相同的接口?

我inheritance了一些传统的Java(1.4)代码,这个devise决定经常出现。 我不明白是否有任何目的或理由。 public interface SoapFacade extends iConfigurable{ } public class SoapFacadeBase implements SoapFacade{ … } public class SoapFacadeImpl extends SoapFacadeBase implements SoapFacade{ … } 正如我所了解的接口(我的实验已经加强),没有任何目的是让父母和孩子都实现相同的接口。 在这种情况下, SoapFacade所有内容都是在SoapFacade中实现的,但是在iConfigurable的方法是在iConfigurable中实现的。 但是,这并不需要SoapFacadeImpl实现SoapFacade 。 有什么我不知道的接口,会给这种模式一些目的或利益? 除了缺乏清晰度之外,是否有潜在的成本推动重构呢? 还是应该简单地重构清晰/简单?

TransformException为common.annotations.Beta重复条目

我开始添加google-api-services-calendar 。 试图构build时遇到此错误: Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'. com.android.build.transform.api.TransformException: java.util.zip.ZipException: duplicate entry: com/google/common/annotations/Beta.class 这是运行./gradlew app:dependencies时输出的一部分./gradlew app:dependencies : compile – Classpath for compiling the main sources. +— com.google.android.gms:play-services-measurement:8.1.0 | +— com.google.android.gms:play-services-base:8.1.0 | | \— com.google.android.gms:play-services-basement:8.1.0 | | \— com.android.support:support-v4:22.2.0 -> 23.0.1 | | \— com.android.support:support-annotations:23.0.1 | \— com.google.android.gms:play-services-analytics:8.1.0 | +— com.google.android.gms:play-services-basement:8.1.0 (*) | \— com.google.android.gms:play-services-ads:8.1.0 | […]

为什么是1 >> 32 == 1?

我想知道如果这可能是一个JVM的错误? Java版本“1.6.0_0”OpenJDK运行时环境(IcedTea6 1.4.1)(6b14-1.4.1-0ubuntu13)OpenJDK 64位服务器虚拟机(构build14.0-b08,混合模式) class Tmp { public static void main(String[] args) { System.out.println("1>>1 = "+(1>>1)); System.out.println("1>>2 = "+(1>>2)); System.out.println("1>>31 = "+(1>>31)); System.out.println("1>>32 = "+(1>>32)); System.out.println("1>>33 = "+(1>>33)); } } 当我运行它时产生这个: 1>>1 = 0 1>>2 = 0 1>>31 = 0 1>>32 = 1 <———- should be 0 i think 1>>33 = 0 我也得到32的任何倍数相同的结果。 我需要写我自己的右移来检查这个吗?

GNU的Java编译器(GCJ)死了吗?

截至2010年10月, GNU的Java编译器死了吗? 有没有任何活动的select(特别是编译Java本地代码)? LLVM解决scheme将是首选。

Java是否保证Object.getClass()== Object.getClass()?

我在这里确实是指身份平等。 例如,以下总是会打印真实的 ? System.out.println("foo".getClass() == "fum".getClass());

在printStackTrace()上打印完整的调用堆栈?

我需要编写一个小型日志分析器应用程序来处理由我的项目中使用的第三方封闭源代码库(里面有自定义logging器)生成的一些日志文件。 如果在日志中inputexception,我需要收集关于堆栈跟踪的方法的汇总信息,从顶部到exception的实际位置。 不幸的是,在默认情况下,Java printStackTrace()不会打印调用堆栈中的每个方法,但是达到一定数量,剩下的仅仅被引用为16 more… 如果我自己可以捕获exception,我会使用getStackTrace()并自己打印它,但根本原因永远不会包含在这个库引发的exception中。 有没有办法让Java打印堆栈跟踪中的整个调用堆栈? 除了我的情况,常见的日志框架可以select吗? 编辑:该程序在JDK 1.5.0_09的Sun JVM上运行。 没有select来改变这一点。

如何防止java.lang.String.split()创build一个前导空string?

传递0作为一个限制参数可以防止尾随的空string,但是如何防止引导空string呢? 例如 String[] test = "/Test/Stuff".split("/"); 产生一个带有“”,“Test”,“Stuff”的数组。 是的,我知道我可以推出我自己的Tokenizer …但StringTokenizer的API文档说 “StringTokenizer是一个遗留的类,为了兼容性的原因被保留下来,尽pipe在新的代码中它的使用是不鼓励的。build议任何寻求这个function的人使用拆分”

ArrayList包含区分大小写

我目前正在使用属于ArrayList类的包含方法进行search。 有没有办法让这个search大小写在java中不敏感? 我发现在C#中可以使用OrdinalIgnoreCase。 有没有一个Java的等价物,或另一种方式来做到这一点? 谢谢。

如何在Android中通过canvas绘制圆圈?

我想通过canvas画圈。 这是我的代码: [MyActivity.java]: public class MyActivity extends Activity { public void onCreate(Bundle savedInstanceState) { … setContentView(new View(this,w,h)); } } [View.java]: public class View extends SurfaceView { public View(Context context, int w, int h) { super(context); Canvas grid = new Canvas(Bitmap.createBitmap(h,w, Bitmap.Config.ARGB_8888)); grid. drawColor(Color.WHITE); Paint paint = new Paint(); paint.setStyle(Paint.Style.FILL); grid.drawCircle(w/2, h/2 , w/2, paint); } […]

类是一个原始types。 genericstypes<T>的引用应该被参数化

我有以下类(从简单的Spring教程) public class CarValidator implements Validator { public boolean supports(Class aClass) { return Car.class.equals(aClass); } public void validate(Object obj, Errors errors) { Car car = (Car) obj; ValidationUtils.rejectIfEmptyOrWhitespace(errors, "model", "field.required", "Required field"); ValidationUtils.rejectIfEmptyOrWhitespace(errors, "price", "field.required", "Required field"); if( ! errors.hasFieldErrors("price")) { if (car.getPrice().intValue() == 0) { errors.rejectValue("price", "not_zero", "Can't be free!"); } } } } […]