public final class ObjectsJava 7中有一个扩展java.lang.Object基类的东西.
这默认是基类,还是我们需要在"Objects"类上调用方法并调用相应的方法?
我安装了java SDK 7,我正在使用Eclipse 3.7.1 Indigo.
当我使用新的Java 7语法来定义HashMap时,它工作正常.
HashMap<Integer, Integer> hashMap = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用闭包语法时,eclipse会抛出编译错误.这就是我想要编译的内容.
public static <T> Collection<T> select(Collection<T> source,
{T=>Boolean} predicate) {
Collection<T> result = new ArrayList<T>();
for (T o : source) {
if (predicate.invoke(o)) {
result.add(o);
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
语法错了吗?或者我做错了吗?
我正在计划学习Java,我有使用其他面向对象语言编程的经验,因此我熟悉OOP概念.目前我正在考虑两本书,以帮助我在Java开发中获得快速启动."首先进入Java第二版"或"Java All-in-One For Dummies第3版".
现在很多人都建议首先将Java作为两本书的优先考虑.然而,首先进入Java的是2005年发布的(除非他们是一个我不知道的更新版本)并且在Java 5中教授.Java All-in-One于去年8月发布并针对Java 7进行了更新.
现在我的问题是我倾向于首先使用Java(使用Java5),我是否会错过Java 6和7的重要方面?我是否能够熟练掌握Java开发人员?
在尝试比较数据类型'int'和'long'的性能时,我遇到了这个奇怪的问题,基本上我有两个单元测试:
@Test
public void testLongOperationPerformance(){
StopWatch sw = new StopWatch();
sw.start();
long count = 0l;
for(int i = 0; i < Integer.MAX_VALUE; i ++){
count++;
}
sw.stop();
System.out.println(count);
System.out.println(sw.elaspedTimeInMilliSeconds());
}
@Test
public void testIntegerOperationPerformance(){
StopWatch sw = new StopWatch();
sw.start();
int count = 0;
for(int i = 0; i < Integer.MAX_VALUE; i ++){
count++;
}
sw.stop();
System.out.println(count);
System.out.println(sw.elaspedTimeInMilliSeconds());
}
Run Code Online (Sandbox Code Playgroud)
这两个单元测试正在做同样的事情,不同的是一个使用int作为计数器的数据类型,另一个使用long.结果:
jdk6u32 (64 bit):
test with long
2147483635
96
test with int
2147483647
2
jdk7 (64 bit)
test with long
2147483647 …Run Code Online (Sandbox Code Playgroud) 我很好奇为什么我们需要Java7中的钻石操作符?我们可以使用一个简单的静态泛型方法来模拟这种行为,该方法可以添加到集合API中:
HashMap的方法代码:
public static <R, S> HashMap<R, S> getInstance() {
return new HashMap<R, S>();
}
Run Code Online (Sandbox Code Playgroud)
我们可以这样使用它:
Map<String, List<String>> m = HashMap.getInstance();
Run Code Online (Sandbox Code Playgroud)
和代码,当你可以尝试这种行为:
import java.util.HashMap;
import java.util.Map;
import java.util.List;
import java.util.Arrays;
public class Diamond {
public static void main(String... args) {
Map<String, List<String>> m = getInstance();
m.put("Hello", Arrays.asList("Peter", "Robert"));
System.out.println(m.toString());
}
public static <R, S> HashMap<R, S> getInstance() {
return new HashMap<R, S>();
}
}
Run Code Online (Sandbox Code Playgroud) Java在其Java7中引入了带有Strings的switch case.我想知道是否使用这样的开关盒会产生垃圾.
例如,在我的程序中,
String s = getString();
switch(s)
{
case ABC: // ABC is a final static constant
...
case CDE: // CDE is also final static constant.
...
}
Run Code Online (Sandbox Code Playgroud)
java如何执行此切换案例.假设有10个这样的开关盒.它会创建一个新的字符串每次它匹配string s与case ABC等?
如果是这种情况,那就非常粗俗,所以当我给出100个案例的开关盒时,每次都会创建100个字符串.
我有一个Class数组Customer.我想按字母顺序重新排序Class数组中Customer基于所调用字段的元素name.
这是我正在使用的代码:
int j;
boolean flag = true; // will determine when the sort is finished
Customer temp;
while ( flag )
{
flag = false;
for ( j = 0; j < count_customers; j++ )
{
if ( customers[ j ].getName().toString().compareToIgnoreCase( customers[ j + 1 ].getName().toString() ) > 0 )
{
temp = customers[ j ];
customers[ j ] = customers[ j+1 ]; // swapping
customers[ j+1 ] = temp;
flag = true; …Run Code Online (Sandbox Code Playgroud) Java 6是这种编程语言的稳定版本.但是我想升级到当前版本的java 7.这时,建议在生产中使用java 7吗?在哪里可以找到有关我升级到java 7时可能遇到的问题的更新信息?
我正在尝试更改图像的亮度,对比度和其他值.我发现我正在使用经典的双循环来进行很多这些操作,只是在双循环中运行一些简单的数学运算,如下所示:
public void changeBrightness(int brightness)
{
for(int i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
pixels[j][i] = MathUtils.ensureRange(pixels[j][i] + brightness,0,254);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我现在需要创建一个几乎完全相同形式的changeContrast方法,并且我想使用一些不同的数学运算来设置这些操作,其中像素被设置.所以,我想用double for循环创建一个泛型方法,它将执行一个作为参数传递的方法.我将如何在Java 7中解决这个问题?以下是我在想的一个例子:
public void runPixelOperation(***pixel operation method goes here***)
{
for(int i=0; i<height; i++)
{
for(int j=0; j<width; j++)
{
pixels[j][i] = ***run pixel operation here***
}
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Java日历在午夜(GMT)创建某个日期,然后将时区更改为我的本地时区,以确保请求的时间为1:00(GMT +1)。下面的代码有效,包括。2个成功断言。
TimeZone TIMEZONE_GMT = TimeZone.getTimeZone("GMT");
TimeZone TIMEZONE_LOCAL = TimeZone.getDefault(); // GMT + 1
private Calendar getMidnightGmtCalendarWithLocalTimezone() {
Calendar calendar = Calendar.getInstance(Locale.GERMAN);
calendar.set(2017, Calendar.JANUARY, 1, 0, 0, 0);
calendar.setTimeZone(TIMEZONE_GMT); // Probably not required
assertEquals(0, calendar.get(Calendar.HOUR_OF_DAY)); // Assert 1
// Log.i("TAG", "" + calendar.get(Calendar.HOUR_OF_DAY));
calendar.setTimeZone(TIMEZONE_LOCAL);
assertEquals(1, calendar.get(Calendar.HOUR_OF_DAY)); // Assert 2
return calendar;
}
Run Code Online (Sandbox Code Playgroud)
现在,我删除第一个断言,并且我希望没有任何变化。现实:第二个断言现在失败了!我试图了解.get()的实现,而且显然它也需要一些时间,因此它不仅仅是收集值。仍然我不明白为什么我的第二个断言失败了。
当我取消对Log行的注释时,第二个断言再次成功(只是为了确保问题出自calendar.get()而不是断言!)
所以第一个问题:为什么会这样?第二问:当我将时区GMT设置为午夜时,如何确保我的日历实例具有本地时区?(换句话说,如何正确转换时区?)
编辑: 我在Android上使用此,所以不能使用Java8。Joda时间(如下建议)是一个很好的选择,我将对此进行深入研究。但是,作为我的问题的答案,我想知道它如何与Java7 Calendar一起使用,因为目前我已绑定到该代码。
java-7 ×10
java ×9
android ×1
bubble-sort ×1
calendar ×1
eclipse ×1
java-5 ×1
jdk6 ×1
long-integer ×1
performance ×1
sorting ×1
string ×1
timezone ×1