首页 > 解决方案 > java代码抽象,泛型,这里的泛型java代码看不懂

问题描述

public abstract class BaseDataItem<V, T, ThisType extends BaseDataItem<V, T, ThisType>> implements DataItem<V, T> { }

    public abstract class SingularDataItem<Value, T> extends BaseDataItem<Value, T, SingularDataItem<Value, T>> {
    
        @Override
        protected int buildHashCode(HashCodeBuilder builder) {
            return builder.toHashCode();
        }
    
        @Override
        protected boolean isEquivalent(SingularDataItem<Value, T> o) {
            return true; // the parent class already verifies that the object is the same class
        }
    }

标签: javagenericsabstraction

解决方案


好吧,我试过了,返回的输出是真的,这意味着无论我为类 Data 创建了多少不同的对象,它们都将始终相等,因此我不知道为什么要编写这样的代码,也许这段代码可以解释从使用此代码的域的角度来看。

public class Test {

public static void main(String[] args) {

    SingularDataItem<String , String> singularDataItem = new Data("testing");
    SingularDataItem<String , String> singularDataItem2 = new Data("testing2");
    System.out.println(singularDataItem.isEquivalent(singularDataItem2));
}}


class Data extends SingularDataItem<String , String>{
private String name;

public Data(String name) {
    this.name = name;
}

public String getName() {
    return name;
}}

abstract class BaseDataItem<V, T, ThisType extends BaseDataItem<V, T, ThisType>> implements DataItem<V, T> {

int buildHashCode(HashCodeBuilder builder){
    return builder.toHashCode();
}

boolean isEquivalent(SingularDataItem<V, T> o){return true;}}

abstract class SingularDataItem<Value, T> extends BaseDataItem<Value, T, SingularDataItem<Value, T>> {

@Override
protected int buildHashCode(HashCodeBuilder builder) {
    return builder.toHashCode();
}

@Override
protected boolean isEquivalent(SingularDataItem<Value, T> o) {
    return true; // the parent class already verifies that the object is the same class
}}

推荐阅读