簡體   English   中英

Java在實現接口中實現接口類型方法

[英]Java Implement an interface type method in implement interface

有一個名為 Range 的接口,例如

public interface Range {
    public Range newRange(int from,int to);
    public boolean isIn(int value);
    public int min();
    public int max();
    public Range add(Range r);
}

在implement接口中, Range newRange(1,5)是設置1到5的范圍數,方法Range add(Range r.newRange(6,8))將1到5的范圍加上6到8 基於方法Range newRange(1,5) boolean isIn(int value)如果值在此范圍內,則返回。 int min()返回范圍內的最小值。 如何使用類作為引用類型來實現方法? 通過傳遞一個對象? 我的新newRange

public Range newRange(int from,int to){
    RangeImplem impIns = new RangeImplem();
    impIns.from = from;
    impIns.to = to;
    return impIns;
}

我對這個問題一無所知,並且對作為引用類型的類有點困惑。 謝謝。

我認為您的界面不正確。 你稱它為 Range,但它內部可以容納多個范圍。

因此,對於好的解決方案,將方法添加到 Range 以獲得多個范圍。

或者這里有一些解決方法:

import java.util.HashSet;
import java.util.Set;

public class RangeImpl implements Range {

    private class SimpleRange {
        public SimpleRange(int from, int to) {
            this.from = from;
            this.to = to;
        }
        final int from;
        final int to;

        @Override
        public boolean equals(Object o) {
            if (this == o) return true;
            if (o == null || getClass() != o.getClass()) return false;

            SimpleRange that = (SimpleRange) o;

            if (from != that.from) return false;
            return to == that.to;

        }

        @Override
        public int hashCode() {
            int result = from;
            result = 31 * result + to;
            return result;
        }
    }

    private Set<SimpleRange> ranges=new HashSet<>();

    @Override
    public Range add(int from, int to) {
        ranges.add(new SimpleRange(from, to));
        return this;
    }


    @Override
    public int min() {
        return 0;
    }

    @Override
    public int max() {
        return 0;
    }

    @Override
    public Range add(Range r) {
        //1) first way If there is only 1 your implementation of Range.
        //extract ranges from inside
        if (ranges instanceof RangeImpl) {
            RangeImpl ri= (RangeImpl) r;
            ranges.addAll(ri.ranges);
        }
        return this;
    }



//    way2:
@Override
public boolean isIn(int value) {
    for (Range externalRange : externalRanges) {
        externalRange.isIn()
    }

    for (SimpleRange range : ranges) {
        range isin
    }
    return false;
}


    @Override
    Set<Range> externalRanges=new HashSet<>();
     //cache supplied ranges and use them in ither methods
    public Range add(Range r) {
        externalRanges.add(r);
        return this;
    }
}
Here is your answer:

package com.genpact.java.interf;

public interface Range {

    /**
    * Create a new Range object representing an integer interval starting from 'from' and 'to', both limits inclusive
    */
    public Range newRange(int from,int to);

    /**
    * Return if 'value' is in the range defined by this object
    */
    public boolean isIn(int value);

    /**
    * Return the minimum value in range
    */
    public int min();

    /**
    * Return the maximum value in range
    */
    public int max();

    /**
    * Add range 'r' to this range, and return 'this'.
    * 'r' and this may denote disjoint ranges, for instance:
    *  r.newRange(1,5).add(r.newRange(8,10)) denotes a range
    * including 1,2,3,4,5,8,9,10

    */
    public Range add(Range r);


}

package com.genpact.java.impl;

import com.genpact.java.interf.Range;

public class RangeImplem implements Range {

    private int from;
    private int to;

    public RangeImplem() {
        // TODO Auto-generated constructor stub
    }

    public RangeImplem(int from, int to) {
        this.from = from;
        this.to = to;
    }

    @Override
    public Range newRange(int from, int to) {
        Range range=new RangeImplem(from, to);
        return range;
    }

    @Override
    public boolean isIn(int value) {
        //Return if 'value' is in the range defined by this object
        if(value >= this.from && value <= this.to){
            return true;
        }
        return false;
    }

    @Override
    public int min() {
        return this.from;
    }

    @Override
    public int max() {
        return this.to;
    }

    @Override
    public Range add(Range r) {
        this.from = r.min();
        this.to = r.min();
        return newRange(this.from,this.to);
    }


    public static void main(String[] args) {
        RangeImplem r=new RangeImplem();
        System.out.println(r.newRange(1,5).isIn(3)); //=> returns true
        System.out.println(r.newRange(1,5).isIn(6)); //=> returns false
        System.out.println(r.newRange(1,5).add(r.newRange(8,10)).isIn(6)); //=> returns false

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM