构造函数中的super(Myclass.class)在Java中是什么意思?

构造函数中的super(Myclass.class)在Java中是什么意思?,java,constructor,comparator,super,Java,Constructor,Comparator,Super,我在Mapreduce程序中反复看到以下代码。这只是取出的一段代码。完整的代码是可用的 构造函数中的super调用做什么?它是否调用IntPair.class的构造函数?为什么这样的电话是必要的 public static class KeyComparator extends WritableComparator { protected KeyComparator() { super(IntPair.class, true); }

我在
Mapreduce
程序中反复看到以下代码。这只是取出的一段代码。完整的代码是可用的

构造函数中的
super
调用做什么?它是否调用
IntPair.class
的构造函数?为什么这样的电话是必要的

public static class KeyComparator extends WritableComparator {
        protected KeyComparator() {
          super(IntPair.class, true);
        }
        @Override
        public int compare(WritableComparable w1, WritableComparable w2) {
          IntPair ip1 = (IntPair) w1;
          IntPair ip2 = (IntPair) w2;
          int cmp = IntPair.compare(ip1.getFirst(), ip2.getFirst());
          if (cmp != 0) {
            return cmp;
          }
          return -IntPair.compare(ip1.getSecond(), ip2.getSecond()); //reverse
        }
      }
super()在构造函数中使用时将调用扩展类的构造函数。在这种情况下,它将调用WriteableComparator构造函数。您可以在以下java文档中看到有关super的更多详细信息:

特别是,请参阅标题为“子类构造函数”的部分。

super(),当在构造函数中使用时,将调用扩展类的构造函数。在这种情况下,它将调用WriteableComparator构造函数。您可以在以下java文档中看到有关super的更多详细信息:

具体请参见标题为“子类构造函数”的部分

它是否调用IntPair.class的构造函数

不,它只是一个在超类构造函数中传递的参数

为什么需要这样的电话

避免调用编译器默认添加的超类的无参数构造函数

如果超类中有多个构造函数,那么可以根据参数指定应该调用超类的哪个构造函数


示例代码:(创建
KeyComparator
对象时查看输出)

类可写比较器{
公共可写比较器(){
System.out.println(“调用默认构造函数”);
}
公共可写比较器(类clazz,布尔标志){
System.out.println(“调用两个参数的构造函数”);
}
}
类KeyComparator扩展了WritableComparator{
公钥比较器(){
//super();//默认情况下由编译器添加
super(IntPair.class,true);
}
}
它是否调用IntPair.class的构造函数

不,它只是一个在超类构造函数中传递的参数

为什么需要这样的电话

避免调用编译器默认添加的超类的无参数构造函数

如果超类中有多个构造函数,那么可以根据参数指定应该调用超类的哪个构造函数


示例代码:(创建
KeyComparator
对象时查看输出)

类可写比较器{
公共可写比较器(){
System.out.println(“调用默认构造函数”);
}
公共可写比较器(类clazz,布尔标志){
System.out.println(“调用两个参数的构造函数”);
}
}
类KeyComparator扩展了WritableComparator{
公钥比较器(){
//super();//默认情况下由编译器添加
super(IntPair.class,true);
}
}

IntPair.class
符号用于获取描述该类的对象。就像这里:

Class type=Integer.Class

类型
变量不是
整数
类的实例,而是描述
整数
类型的对象的实例

某些类要求您向它们传递希望它们使用的对象的类型。然后,他们可以使用这个
类型
对象创建这些类的新实例


IntPair.class
符号用于获取描述该类的对象。就像这里:

Class type=Integer.Class

类型
变量不是
整数
类的实例,而是描述
整数
类型的对象的实例

某些类要求您向它们传递希望它们使用的对象的类型。然后,他们可以使用这个
类型
对象创建这些类的新实例


花点时间阅读花点时间阅读,为了避免
super()
,将
super(Intpair.class,true)
设置为正确?。那么它是否还有其他用途呢?是的,你正朝着正确的方向前进。一个类有多个基于输入的构造函数,您可以决定调用所需的构造函数。因此,在这种情况下,如果我使用
super(String.class,true)
就可以了。但我想,这将与我正在实现的
compare
方法相冲突。根据我的代码,这是正确的。现在,如果您面临任何问题,请共享代码或单独提问。因此,为了避免使用
super()
,将
super(Intpair.class,true)
设置为正确?。那么它是否还有其他用途呢?是的,你正朝着正确的方向前进。一个类有多个基于输入的构造函数,您可以决定调用所需的构造函数。因此,在这种情况下,如果我使用
super(String.class,true)
就可以了。但我想,这将与我正在实现的
compare
方法相冲突。根据我的代码,这是正确的。现在,如果您面临任何问题,请分享代码或提出单独的问题。
class WritableComparator {
    public WritableComparator(){
        System.out.println("default constructor is called");
    }
    public WritableComparator(Class<?> clazz, boolean flag) {
        System.out.println("two arguemnts constructor is called");
    }
}

class KeyComparator extends WritableComparator {
    public KeyComparator() {
        //super(); // by default added by the compiler
        super(IntPair.class, true);
    }
}