构造函数中的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);
}
}