我是泛型类型的新手,并且想知道如何在泛型类中正确实现泛型接口,因此类型的确定将延迟到我实例化此对象的时刻泛类。
我的代码如下:
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>
问题:
感谢您的任何建议。
答案 0 :(得分:0)
我不知道这个process
方法的来源,因为您没有将它包含在您列出的任何类中。但是,因为此方法将根据其中一个参数简单地创建并返回一个新类,所以最好将其作为static
实用程序方法,这不需要重写它。此外,甚至没有使用file
参数,因此可以将其删除:
public static ProcessorResult<T> process(T result) {
return new ProcessorResultImpl<T>(result);
}
现在可以通过以下方式调用该方法,以生成之前的等效输出:
public class ... implements ...<Long> {
public static void main(String... args) {
Somewhere.process(10L);
}
}