Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit faf49a2

Browse files
Merge pull request #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)

AltStyle によって変換されたページ (->オリジナル) /