【发布时间】:2017-07-15 09:00:42
【问题描述】:
我是泛型类型的新手,想知道如何在泛型类中正确实现泛型接口,因此类型的确定将延迟到我实例化该泛型类的对象时。
我的代码如下:
package org.processor.interfaces;
import org.filter.interfaces.IFile;
public interface ProcessorResult<T> {
public IFile getFile();
public String getProcessorName();
public Class<? extends Processor<T>> getProcessorClass();
public T getResult();
}
以及实现该接口的类:
package org.processor.interfaces.impl;
import org.filter.interfaces.IFile;
import org.processor.interfaces.Processor;
import org.processor.interfaces.ProcessorResult;
public class ProcessorResultImpl<T> implements ProcessorResult<T> {
private T result;
private String processorName;
private IFile file;
public ProcessorResultImpl(T result) {
this.t = result;
}
@Override
public IFile getFile() {
return file;
}
@Override
public String getProcessorName() {
return processorName;
}
@Override
public Class<? extends Processor<T>> getProcessorClass() {
return null;
}
@Override
public T getResult() {
return t;
}
}
我想实例化这个类的对象的那一刻是在返回ProcessorResult的方法中(这只是为了演示):
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.filter.interfaces.IFile;
import org.processor.interfaces.Processor;
import org.processor.interfaces.ProcessorFilter;
import org.processor.interfaces.ProcessorResult;
public class ProcessorLineCountImpl<T> implements Processor<T> {
private ProcessorFilter<T> processorFilter;
private String name;
public ProcessorLineCountImpl() {
}
public ProcessorResult<T> process(IFile file) {
int count = 0;
try (Scanner sc = new Scanner(file.openInputStream())) {
while (sc.hasNext()) {
String word = sc.next();
if (word.indexOf("\\") == -1) {
count++;
}
}
return null;
}
return null;
@Override
public String getName() {
return name;
}
@Override
public void setFilter(ProcessorFilter<T> filter) {
this.processorFilter = filter;
}
在这种情况下,我会收到 语法错误:
Type mismatch: cannot convert from ProcessorResultImpl<Long> to
ProcessorResult<T>
问题:
- 如何正确完成,因为我没有想法并且在网络上找不到任何解决方案。
- 将类型确定延迟到对象实例化是一种好方法吗?
感谢您的建议。
【问题讨论】:
-
这完全没有意义——如果它是通用的,那你为什么要硬编码
Long? -
这个
process方法是在哪里定义的? -
process需要返回ProcessorResult<Long> -
@OliverCharlesworth 我知道,因为我是泛型的新手,我真的很想知道如何正确完成它,正如你提到的,我希望它不是硬编码为长但也支持其他类型。