java中的兼容/不兼容對象是什麼?什麼是java中兼容的不兼容對象?
回答
可能你的意思是comparable
而不是compatible
?然後...
在常識中,可比對象是同一種「對象」。你可以用某種有意義的方式相互比較。
例如,您可以通過多種因素比較一棟建築物與另一棟建築物:按高度 - 比其他建築物的總面積高一個建築物的空間總面積,或者更爲不尋常的例子是按樓梯長度。
通常,您將設置關於如何比較對象的規則。只要確保這些規則是一致的(當它們適用於任何可比對象的實例時,它們會給出明智的答案):
- 對象可以與自身進行比較;
- 比較A到B給出了與B比較A相同的結果;
- 如果對象A與B相比,並且B與C相比較並且兩個比較都給出了相同的結果,那麼比A相比C必須給出相同的結果;
這是關於一般常識。
在Java中,這個概念可以通過使某種類型來表示,例如Building
,實現接口Comparable
。該界面表達了與上述概念相同的概念。
Comparable
類型的對象必須符合上述規則。
這個概念給你什麼?如果您的對象可以按照上述規則進行比較,並且它們支持接口,則可以對這些對象的集合進行排序!你不需要自己編寫排序算法,因爲Java已經實現了它!
正如您在「建築物」示例中指出的那樣,建築物不僅可以根據其高度進行有意義的比較,而且可以根據其總面積進行比較。由於Comparable
對象自然只能表示一種比較,所以需要用其他方式來比較不同的建築物。這種方式由Comparator
接口提供,表達了相同的概念,但是在比較對象外部,因此它可以以不同的方式實現 - 您可以有Comparator
用於總面積,另一個用於長度等。
對於相當長例如:
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
class Building implements Comparable<Building> {
final int height, totalArea;
final String name;
Building(int height, int totalArea, String name) {
this.height = height;
this.totalArea = totalArea;
this.name = name;
}
public int compareTo(Building o) {
if (height < o.height) return -1;
if (height == o.height) return 0;
return 1;
}
@Override
public String toString() {
return "Building{" +
"height=" + height +
", totalArea=" + totalArea +
", name='" + name + '\'' +
'}';
}
}
public class Main {
public static void main(String[] args) {
List<Building> buildings = Arrays.asList(
new Building(100, 5000, "Medium"),
new Building(250, 3000, "Very tall"),
new Building(50, 4000, "Short"),
new Building(150, 3500, "Tall")
);
// sort as defined by Object itself -- by height
Collections.sort(buildings);
System.out.println(buildings);
// sort by providing explicit order criteria -- total area
Collections.sort(buildings, new Comparator<Building>() {
public int compare(Building o1, Building o2) {
if (o1.totalArea < o2.totalArea) return -1;
if (o1.totalArea == o2.totalArea) return 0;
return 1;
}
});
System.out.println(buildings);
}
}
最後,不可比較的對象 - 這些是不同種類的,這是不能被自然比較的對象。人們談論這樣的嘗試「不要把蘋果與橘子比較」,或類似的東西。
雖然如果你能想出一種方法來比較蘋果和橘子的符合上面列出的3條規則的目的,那麼你很好!
主要兼容/不兼容對象與序列化有關。可能是下面的鏈接是對您有用..
http://docs.oracle.com/javase/6/docs/platform/serialization/spec/version.html
兼容性是關於Java中不同類的對象使用的上下文。一個類的對象汽車不能與類Animal的對象進行比較。
因此,如果您嘗試執行任何操作(如將某個類型的對象轉換爲另一個操作),則會說操作不成功,因爲對象不兼容。
- 1. 不兼容的對象類型 - Java
- 2. 對象名不兼容
- 3. 什麼版本的java與blpapi兼容?
- 4. Java兼容性
- 5. 不兼容的設備,如何兼容?
- 6. 兼容性傳遞對象
- 7. 對象/ XML向後兼容
- 8. 的Java類型不兼容
- 9. 不兼容的類型? - Java
- 10. 不兼容的託管對象模型
- 11. .NET 4.0的兼容性是什麼?
- 12. 什麼是SNMP的向後兼容性?
- 13. 什麼是RFC兼容的URI
- 14. 什麼是J2ME兼容的WebDAV庫?
- 15. 什麼是Kotlin的兼容性策略?
- 16. 什麼是ReSharper的「StyleCop兼容性」?
- 17. 兼容X-UA的要點是什麼?
- 18. CUDA CUBIN對象是否向後兼容?
- 19. E2010不兼容的類型,爲什麼?
- 20. 爲什麼不兼容的類型?
- 21. Java:不兼容類型
- 22. 與Java不兼容7
- 23. Java JRE版本不兼容
- 24. Java DefaultMutableTree不兼容類型
- 25. Java ArrayList不兼容類型
- 26. JAVA不兼容類型值
- 27. Java setBounds與JPanel不兼容
- 28. IE11兼容模式和IE10兼容模式有什麼區別
- 29. 對象C代表不兼容類型
- 30. 不兼容對象模型版本
你是什麼意思?相等/不相等? – Svilen 2012-03-20 06:20:32
還是你在談論繼承和接口? – home 2012-03-20 06:26:10
從何種意義上說?將一個對象引用分配給另一個對象? – Raj 2012-03-20 06:46:02