我有一个从“ParentObj”扩展的Java对象“ChildObj”。 现在,如果可以使用Javareflection机制检索ChildObj的所有属性名称和值,包括inheritance的属性, Class.getFields给了我公共属性的数组,而Class.getDeclaredFields给了我所有字段的数组,但是他们都没有包含inheritance的字段列表。 有没有办法检索inheritance的属性?
我有一个List<SubClass> ,我想作为一个List<BaseClass> 。 看起来这不应该是一个问题,因为投下一个SubClass到一个BaseClass是一个快照,但我的编译器抱怨说,转换是不可能的。 那么,什么是最好的方式来获得一个List<BaseClass>相同的对象的引用? 现在我只是创build一个新的列表,并复制旧的列表: List<BaseClass> convertedList = new ArrayList<BaseClass>(listOfSubClass) 但据我所知,这必须创build一个全新的名单。 如果可能,我想参考原始列表!
所以说我有一个扩展超类的子类。 在什么情况下,我需要显式键入super()来获取超类构造函数来运行? 我在一本关于抽象类的书中看到了一个例子,当它用一个非抽象的子类扩展它的时候,子类的默认构造函数是空的,并且有一个注释说超类的默认构造函数将被调用。 同时我也在这里看到有些人的问题没有明确地调用super() 。 区别是从子类的默认/非默认构造函数调用超类的默认/非默认构造函数?
如果我有这样的枚举: public enum Letter { A, B, C, //… } 什么是随机select一个最好的方法? 它不需要是生产质量防弹,但相当均匀的分布将是很好的。 我可以做这样的事情 private Letter randomLetter() { int pick = new Random().nextInt(Letter.values().length); return Letter.values()[pick]; } 但有没有更好的办法? 我觉得这是之前解决的问题。
在Mac OS X上使用Java版本“1.7.0_45”在Eclipse Kepler上安装简单的Google App Engine Web应用程序项目 遇到以下情况: objc[5398]: Class JavaLaunchHelper is implemented in both /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin/java and /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre/lib/libinstrument.dylib. One of the two will be used. Which one is undefined. 当我尝试在本地主机上运行Web应用程序 可能与以下问题有关: https://code.google.com/p/googleappengine/issues/detail?id=10046 任何帮助将是有用的。
我在哪里可以查看Eclipse中的Tomcat日志文件? 出于某种原因,我的Tomcat的安装/日志文件夹总是空的。 顺便说一下,Tomcat转储到日志文件一段时间或立即?
我们使用Tomcat托pipe基于WAR的应用程序。 除了org.apache.catalina.authenticator.SingleSignOn,我们是符合servlet容器的J2EE应用程序。 我们被要求转向商业Java EE应用服务器。 改变的第一个缺点是我看到的是成本。 不pipe应用程序服务器的收费如何,Tomcat都是免费的。 其次是复杂性。 我们不使用EJB和EAR特性(当然不是,我们不能),也没有使用它们。 那么我没有看到什么好处呢? 有什么缺点,我没有提到? 提到的是… JTA – Java事务API – 我们通过数据库存储过程来控制事务。 JPA – Java持久性API – 我们使用JDBC和再次存储的过程来坚持。 JMS – Java消息服务 – 我们使用XML over HTTP进行消息传递。 这很好,请多多关照!
假设我刚刚使用BufferedInputStream将UTF-8编码文本文件的字节读入字节数组中。 我知道我可以使用下面的例程将字节转换为一个string,但是这样做比单纯遍历字节和转换每个字节更有效率/更智能吗? public String openFileToString(byte[] _bytes) { String file_string = ""; for(int i = 0; i < _bytes.length; i++) { file_string += (char)_bytes[i]; } return file_string; }
我正在研究一个高性能的Android应用程序(一个游戏),尽pipe我首先尝试为可读性编写代码,但是我仍然喜欢把脑海中正在发生的事情放在脑海中。 用C ++,我已经开发了一个相当好的直觉了解编译器会做什么,不会为我做什么。 我正在尝试为Java / Android做同样的事情。 因此,这个问题。 在networking上我可以find关于这个话题的很less的东西。 Java编译器,Dalvik转换器(dx)和/或JITter(在Android 2.2+上)会执行如下的优化吗? 方法内联。 在什么条件下? private方法总是可以安全地内联; 这会完成吗? public final方法如何? 其他类的对象的方法? static方法? 如果对象的运行时types可以很容易地被编译器推断出来怎么办? 我应该尽可能将方法声明为final或static吗? 常见的子expression式消除。 例如,如果我访问someObject.someField两次,查询是否只做一次? 如果这是一个getter的调用呢? 如果我使用了两次算术expression式呢? 只会评估一次吗? 如果我将某个expression式的结果用作for循环的上界,那我该怎么办? 边界检查arrays查找。 工具链会在某些情况下消除这个问题,比如原型循环? 价值内联。 将访问到一些public static final int总是内联? 即使他们在另一个class级? 即使他们在另一个包裹? 分支预测。 这个问题甚至有多大? 分支是一个典型的Android设备上的大型性能? 简单的算术。 将someInt * 2replace为someInt << 1 ? 诸如此类……
我试图找出一个特定情况下的最佳容量和负载因数。 我想我已经掌握了它的要点,但是我仍然要感谢比我更有认识的人的确认。 🙂 如果我知道我的HashMap将会填满100个对象,并且大部分时间会花费100个对象,那么我猜测最佳值是初始容量100和负载因子1? 或者我需要容量101,还是还有其他问题? 编辑:好的,我搁置了几个小时,做了一些testing。 结果如下: 奇怪的是,容量,容量+1,容量+2,容量-1甚至容量-10都会产生完全相同的结果。 我希望至less能力1和能力10能给出更坏的结果。 使用初始容量(而不是使用默认值16)可以提供显着的put()改进 – 速度提高多达30%。 使用1的负载因子可以为less量对象提供相同的性能,而对于大量对象(> 100000)则可以获得更好的性能。 但是,这并不能与对象的数量成比例地提高。 我怀疑还有其他因素会影响结果。 对于不同数量的对象/容量,get()性能有点不同,但是,虽然它可能会略有不同,但通常不受初始容量或负载因素的影响。 编辑2:在我的部分也添加一些图表。 这里是一个说明负载因子0.75和1之间的区别,在我初始化HashMap并填充满容量的情况下。 在y尺度上,以ms为单位的时间(越低越好),x尺度是尺寸(对象的数量)。 由于尺寸线性变化,所需时间也线性增长。 所以,让我们看看我得到了什么。 以下两个图表显示了负载因素的差异。 第一个图表显示了当HashMap被填充到容量时会发生什么; 加载因子0.75由于resize而变差。 然而,这并不总是更糟糕,而且还有各种各样的颠簸和跳跃 – 我猜测GC在这方面有一个重大的发挥。 负载系数1.25与1相同,因此不包含在图表中。 这个图表certificate0.75因resize而变差; 如果我们将HashMap填充到一半的容量,0.75不会更差,只是…不同(应该使用更less的内存,并具有不可思议的更好的迭代性能)。 还有一件事我想展示。 这是获得所有三个加载因子和不同的HashMap大小的性能。 除了一个负载因数为1的尖峰之外,总是保持不变。我真的很想知道这是什么(可能是GC,但是谁知道)。 这里是有兴趣的代码: import java.util.HashMap; import java.util.Map; public class HashMapTest { // capacity – numbers high as 10000000 require -mx1536m -ms1536m JVM parameters […]