我有一堂課。它的公共介面(不包括建構式)不是通用的,但它的內部邏輯是通用的。一個簡化的例子是:
class Summarizer<T> {
private final ComplicatedProducer<T> producer;
private final Processor<T> processor;
StreamSummarizer(ComplicatedProducer<T> producer, Processor<T> processor) {
...
}
public int summarizeAll() {
int sum = 0
// some business logic goes here
for (...) {
sum = processor.process(producer.next());
}
return sum;
}
public int summarizeSomePortion(Parameters p) {
// some other business logic goes here
...
}
}
請注意(構造后), 的用戶對的型別Summarizer不感興趣T。在我的例子中,型別在編譯時是未知的(我們使用反射來構造ComplicatedProducer和Processor),我寧愿不必有一個回傳Summarizer<?>. 有沒有什么干凈的方法可以在Summarizer不使用原始型別的情況下制作非泛型?
uj5u.com熱心網友回復:
您始終可以使用單級包裝器:
class SummarizerImpl<T> {
private final ComplicatedProducer<T> producer;
private final Processor<T> processor;
SummarizerImpl(ComplicatedProducer<T> producer, Processor<T> processor) {
...
}
}
class Summarizer {
private final SummarizerImpl<?> impl;
private Summarizer(SummarizerImpl<?> impl) { ... }
public static <T> Summarizer create(
ComplicatedProducer<T> producer, Processor<T> processor) {
return new Summarizer(new SummarizerImpl<T>(producer, processor));
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/403809.html
標籤:
上一篇:JavaSpringJDBC
