重命名子类中的变量

时间:2015-11-06 15:08:00

标签: java

我有一个简单的元组类。

public class Tuple<X, Y> { 
    public X first; 
    public Y second; 
    public Tuple(X x, Y y) { 
        this.first = x; 
        this.second = y; 
    }

    @Override
    public String toString() {
        return "(" + first + "," + second + ")";
    }

    @Override
    public boolean equals(Object other) {
        if (other == null) {
            return false;
        }
        if (other == this) {
            return true;
        }
        if (!(other instanceof Tuple)){
            return false;
        }
        Tuple<X,Y> other_ = (Tuple<X,Y>) other;
        return other_.first == this.first && other_.second == this.second;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((first == null) ? 0 : first.hashCode());
        result = prime * result + ((second == null) ? 0 : second.hashCode());
        return result;
    }
}

我在几种不同的环境中使用它。我有文章和他们的ID,他们的ID和矢量权重等元组。过了一段时间,它只是看到firstsecond作为变量名称,它们可能意味着像{ {1}}和name。有没有什么办法可以多次将这个类子类化,将idfirst重命名为有意义的名称,而无需覆盖secondtoString()equals()

1 个答案:

答案 0 :(得分:1)

您可以继承Tuple并添加具有有意义名称的额外getter。此外,构造函数参数也已命名。您还可以通过在构造函数中将id声明为int来强制public class NameIdTuple extends Tuple<String, Integer> { public NameIdTuple(String name, int id) { super(name, id); } public String name() { return first; } public int id() { return second; } } 不可为空。

getFirst()

方法getSecond()getClass()仍然可以调用(因此您具有完全向后兼容性)。

我不知道您使用的是哪个IDE,但IntelliJ的自动完成功能会显示在类中以粗体声明的方法,其他如equals()getFirst()<script type="text/javascript" src="/js/lib/react.js"></script> <script type="text/javascript" src="/js/lib/react-dom.js"></script> <script type="text/javascript" src="/js/lib/browser.min.js"></script> <script type="text/babel" src="/js/views/item.jsx"></script> <script type="text/babel" src="/js/views/list.jsx"></script> <script type="text/babel"> ReactDOM.render(<List url="/get"/>, document.getElementById("content")) ; </script>赢了t以粗体显示,因此不太可能在新代码中使用它们。