非常感謝您的閱讀。在Java中實現「重新定義」屬性的最佳方式是什麼?
我所說的「重新定義」是UML規範中被廣泛使用的概念。
我的理解是:「重新定義」屬性的類型是「重新定義」屬性類型的子類。雖然「重新定義」屬性的所有者是「重新定義」屬性所有者的子類。
考慮下面的例子:
Duration extends ValueSpecification
DurationInterval extends Interval
Interval has two attributes typed by ValueSpecification, min and max;
DurationInterval has two "redefined" attributes typed by Duration, min and max;
這是我實現:
1)如果我在DurationInterval定義最小/最大,我躲在另一場;實際上,這是實現「重新定義」屬性的最簡單方法。任何人都爲這種實現投票?
public Duration min/max;
2)然後,我推出了「消氣」,大,Oracle描述的「協變返回類型」,所以這樣的作品。 但是,我必須向下投下該類型才能使其工作。
3)對於「Setters」,但是,如果我添加「@Override」,我會得到錯誤。我認爲這是有爭議的;首先,我不得不承認,甲骨文明確表示這不是重寫。其次,我認爲這是「Override」,只是Oracle還沒有實施。我錯了,因爲我不知道他們這樣做的原因?
4)你在UML的重定義屬性上的實現是什麼?
public class RedefineProj {
static class ValueSpecification{}
static class Duration extends ValueSpecification{}
static class Interval{
public ValueSpecification min;
public ValueSpecification max;
public ValueSpecification getMin(){
return min;
}
public ValueSpecification getMax(){
return max;
}
public void setMin(ValueSpecification min_){
min = min_;
}
public void setMax(ValueSpecification max_){
max = max_;
}
}
static class DurationInterval extends Interval{
@Override
public Duration getMin(){
return (Duration) min;
}
@Override
public Duration getMax(){
return (Duration)max;
}
public void setMin(Duration min_){
min = min_;
}
public void setMax(Duration max_){
max = max_;
}
}
public static void main(String[] args) {
// TODO code application logic here
Interval i = new Interval();
ValueSpecification v = i.getMax();
DurationInterval di = new DurationInterval();
Duration d = di.getMax();
}
}
請遵守Java慣例並使用**小寫字母**例如'setMin(...)'。大寫字母用於類名。 –
謝謝,更正 – milesma