Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么是java中的兼容不兼容对象?_Java_Object - Fatal编程技术网

什么是java中的兼容不兼容对象?

什么是java中的兼容不兼容对象?,java,object,Java,Object,java中什么是兼容/不兼容对象?主要兼容/不兼容对象与序列化有关。下面的链接可能对您有用 主要兼容/不兼容的对象与序列化有关。下面的链接可能对您有用 兼容性是java中用于不同类的对象的上下文。汽车类物品不能与动物类物品相比较 因此,如果您尝试执行任何操作,如将一种类型的对象强制转换为另一种类型的对象,则会说操作不成功,因为对象不兼容。兼容性是java中用于不同类的对象的上下文。汽车类物品不能与动物类物品相比较 因此,如果您尝试执行任何操作,如将一种类型的对象强制转换为另一种类型,则会说操作不

java中什么是兼容/不兼容对象?

主要兼容/不兼容对象与序列化有关。下面的链接可能对您有用


主要兼容/不兼容的对象与序列化有关。下面的链接可能对您有用


兼容性是java中用于不同类的对象的上下文。汽车类物品不能与动物类物品相比较


因此,如果您尝试执行任何操作,如将一种类型的对象强制转换为另一种类型的对象,则会说操作不成功,因为对象不兼容。

兼容性是java中用于不同类的对象的上下文。汽车类物品不能与动物类物品相比较


因此,如果您尝试执行任何操作,如将一种类型的对象强制转换为另一种类型,则会说操作不成功,因为对象不兼容。

您的意思可能是
可比
,而不是
兼容
?然后

在一般意义上,可比对象是相同“种类”的对象。你可以用一些有意义的方式相互比较

例如,您可以通过各种因素将一座建筑与另一座建筑进行比较:根据高度——一座建筑比另一座建筑高,根据建筑空间的总面积,或者,更不寻常的是,根据楼梯的长度

通常,您可以设置有关如何比较对象的规则。只要确保这些规则是一致的(它们在应用于可比较对象的任何实例时给出了合理的答案):

  • 对象可以与自身相比较
  • 将A与B进行比较得出的结果与将B与A进行比较得出的结果相同
  • 如果将对象A与B进行比较,并将对象B与C进行比较,且两次比较得出的结果相同,则将对象A与C进行比较得出的结果必须相同
这是一般常识

在Java中,这个概念可以通过创建某种类型来表达,例如,
构建
,实现接口
可比较
。该接口表达了与上述相同的比较概念

可比
类型的对象必须符合上述规则

这个概念给了你什么?如果您的对象可以按照上述规则进行比较,并且它们支持
compariable
界面,那么您可以对这些对象的集合进行排序!而且您不需要自己编写排序算法,因为Java已经实现了它

正如您在建筑物示例中所指出的,建筑物不仅可以通过其高度进行有意义的比较,还可以通过其总面积进行比较。由于
compariable
对象只能自然地表示一种比较,因此需要使用其他方法以不同的方式比较建筑。这种方式由
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);
    }
}
导入java.util.array;
导入java.util.Collections;
导入java.util.Comparator;
导入java.util.List;
班级建设实现了可比性{
最终整数高度,总面积;
最后的字符串名;
建筑物(整数高度、整数总面积、字符串名称){
高度=高度;
this.totalArea=总面积;
this.name=名称;
}
公共内部比较(o栋){
如果(高度
最后,不可比较的对象——这些是不同种类的对象,不能自然地进行比较。人们谈论这样的尝试“不要拿苹果和桔子作比较”,或者诸如此类的事情


尽管如此,如果你能想出一种方法来比较苹果和橙子,并且符合上面列出的3条规则,你就可以去了

您的意思是“可比的”而不是“兼容的”
?然后

在一般意义上,可比对象是相同“种类”的对象。你可以用一些有意义的方式相互比较

例如,您可以通过各种因素将一座建筑与另一座建筑进行比较:根据高度——一座建筑比另一座建筑高,根据建筑空间的总面积,或者,更不寻常的是,根据楼梯的长度

通常,您可以设置有关如何比较对象的规则。只要确保这些规则是一致的(它们在应用于可比较对象的任何实例时给出了合理的答案):

  • 对象可以与自身相比较
  • 将A与B进行比较得出的结果与将B与A进行比较得出的结果相同
  • 如果将对象A与B进行比较,并将对象B与对象C进行比较,两次比较得出的结果相同