Skip to content

Commit faf49a2

Browse files
authored
Merge pull request giantray#83 from jinzhencheng/master
添加了<<当导入项目到eclipse时报错》的翻译
2 parents b0adca9 + 62d40b1 commit faf49a2

File tree

2 files changed

+110
-0
lines changed

2 files changed

+110
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
2+
##问题
3+
大多数情况下,当我重新导入项目到eclipse的时候,我重写的方法都不能被正确格式化,导致这样的错误:
4+
> The method must override a superclass method.
5+
6+
需要说明的是这是一个Android项目,不知道什么原因,方法的参数被篡改了,因此,我不得不手动的把他们改回来。
7+
例如:
8+
```java
9+
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
10+
//这儿的参数名是正确的
11+
public void onCreateContextMenu(ContextMenu menu, View v,
12+
ContextMenuInfo menuInfo) {
13+
}
14+
});
15+
```
16+
初始化的时候被篡改成了这样:
17+
```java
18+
list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
19+
//这儿的参数被篡改成了这样
20+
public void onCreateContextMenu(ContextMenu arg1, View arg2,
21+
ContextMenuInfo arg3) {
22+
}
23+
});
24+
```
25+
奇怪的是,如果我移除我的代码并使用eclipse自动创建方法的话,它还是会是相同的参数(被篡改的)。因此,我真不知道那儿的问题,它本应该自动格式化代码的。
26+
要是手动的去修改被篡改的参数名,那是一个非常痛苦的过程。要是有人能解释为什么会出现这样的情况以及怎样去解决它,我感激不尽。
27+
是不是因为我格式化的这个方法,是另一个方法里面的参数而导致的这样的问题呢?
28+
29+
##回答
30+
Eclipse的默认执行环境是java 1.5况且你使用了类的声明接口方法(在java 1.6中能使用@Ovrride注释,但是在java 1.5中一个方法只能重写父类的方法)
31+
32+
打开你的项目,然后找到preference并且设置java的编译版本为1.6,同时也确保你的eclipse是使用JRE 1.6 来执行你的程序的。
33+
34+
Stack Overflow原地址:http://stackoverflow.com/questions/1678122/must-override-a-superclass-method-errors-after-importing-a-project-into-eclips
35+
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
2+
3+
##通过对象属性对常规对象的ArrayList进行排序
4+
5+
###问题
6+
我读过使用Comparator对常规类的ArrayList进行排序的示例,但是它们大多数使用comparedTo(),据我了解这是一个对字符串进行操作的方法。
7+
我想要对一个由常规对象构成的ArrayList,通过它的属性(一个Date对象,getStartDate())对ArrayList进行排序。通常情况下我这样比较它们:
8+
```java
9+
item1.getStartDate().before(item2.getStartDate())
10+
```
11+
所以我能不能像下面一样:
12+
```java
13+
public class CustomComparator {
14+
public boolean compare(Object object1, Object object2) {
15+
return object1.getStartDate().before(object2.getStartDate());
16+
}
17+
}
18+
19+
public class RandomName {
20+
...
21+
Collections.sort(Database.arrayList, new CustomComparator);
22+
...
23+
}
24+
```
25+
26+
###回答
27+
以前Date声明了Comparable,它有一个像处理字符串操作那样的compareTo方法。因此你可以这样:
28+
```java
29+
public class CustomComparator implements Comparator<MyObject> {
30+
@Override
31+
public int compare(MyObject o1, MyObject o2) {
32+
return o1.getStartDate().compareTo(o2.getStartDate());
33+
}
34+
}
35+
```
36+
这儿的compare()方法必须返回int,所以不能像你预期那样直接返回boolean.
37+
你的代码看起来应该是这样:
38+
```java
39+
Collections.sort(Database.arrayList, new CustomComparator());
40+
```
41+
如果你不需要重复使用comparetor的话,一种简单的方法是,把它写成一个内部类的样子:
42+
```java
43+
Collections.sort(Database.arrayList, new Comparator<MyObject>() {
44+
@Override
45+
public int compare(MyObject o1, MyObject o2) {
46+
return o1.getStartDate().compareTo(o2.getStartDate());
47+
}
48+
});
49+
```
50+
自java8 开始,你可以使用lambda表达式一种简洁的方式来写Comparator()
51+
```java
52+
Collections.sort(Database.arrayList,
53+
(o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
54+
```
55+
并且List有一个sort(Comparator)方法,所以你可以进一步简化它
56+
```java
57+
58+
Database.arrayList.sort((o1, o2) -> o1.getStartDate().compareTo(o2.getStartDate()));
59+
```
60+
这是一种司空见惯的方法,使用Comparable为一个类创建一个Comprator
61+
```java
62+
Database.arrayList.sort(Comparator.comparing(MyObject::getStartDate));
63+
All of these are equivalent forms.
64+
```
65+
66+
stackoverflow原地址:http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property
67+
68+
69+
70+
71+
72+
73+
74+
75+

0 commit comments

Comments
 (0)