簡體   English   中英

Java 通用,這是最好的方法嗎?

[英]Java generic, Is this best way?

這是我的示例代碼

public class Example {
    static interface Data {

    }

    static interface Source<D extends Data> {
        public D read();
    }

    static class Stream<S extends Source<D>, D extends Data> {
        public S source;

        public Stream(S source){
            this.source = source;
        }

        public D get() {
            return this.source.read();
        }
    }

    static class SampleData implements Data {
    }

    static class SampleSource implements Source<SampleData> {
        @Override
        public SampleData read() {
            return null;
        }
    }

    public static void main(String[] args) {
        Stream sampleSourceStream = new Stream<SampleSource, SampleData>();
    }
}

我想省略(為了更漂亮的結構/易於使用)

static class Stream<S extends Source<D>, D extends Data>

static class Stream<S extends Source<D>>

或者

new Stream<SampleSource, SampleData>()

new Stream<SampleSource>()

(我知道它可以在 C# 中省略...)

我怎樣才能省略或制作更漂亮的圖案?

不要定義S ,它沒有任何作用:

static class Stream<D extends Data> {
    public Source<D> source;

    public Stream(Source<D> source){
        this.source = source;
    }

    public D get() {
        return this.source.read();
    }
}
public static void main(String[] args) {
    SampleSource sampleSource = new SampleSource();
    Stream<SampleData> sampleSourceStream = new Stream<>(sampleSource);
}

或者在 Java 10+ 中甚至更簡單,使用var

public static void main(String[] args) {
    SampleSource sampleSource = new SampleSource();
    var sampleSourceStream = new Stream<>(sampleSource);
}

暫無
暫無

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

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