2014-07-10 45 views
2

我想在类中实现通用接口。 考虑实施此通用接口:在通用类中实现通用接口

public interface Lookup<T>{ 
    public T find(String name); 
} 

,这是不是通用类实现查找:

public class IntegerLookup implements Lookup<Integer>{ 
    private Integer[] values; 
    private String[] names; 

    public IntegerLookup(String[] names, Integer[] values) {......} 
    //now I want to write the implemented method - find 

,我的问题是: 怎么做我需要写这个实施方法? 我需要重写它吗?是?

public Object find(String name){...} 

会好吗?或:

public Integer find(String name){...} 
+3

Anywhere在超类型中使用'T','Integer'应该用在'Integer'作为'T'类型参数的子类中。 –

+0

为什么你不能只用@Override注解来尝试呢? – Ordous

+0

@SotiriosDelimanolis,但它写入对象不是在超类型T ...或者我错了? –

回答

3

当你提供一个类型参数像你在这里做

public class IntegerLookup implements Lookup<Integer>{ 
//           ^

你正在做的是结合提供给类型变量的类型声明的类型。所以Integer必然是T

所以,

public Integer find(String name){...} 

这是一样的做

Lookup<Integer> lookup = ...; 
lookup.find("something"); // has a return type of Integer 
+0

好吧,但我不明白,我可以写也:公共对象查找(字符串名称)? –

+1

@YuvalLevy当你在代码中尝试时会发生什么? –

0

从您的意见,它听起来就像你真的想用Object作为返回类型。我无法想象为什么你会这样做,但如果是这样,你实际上需要实现Lookup<Object>而不是Lookup<Integer>

但不这样做。使用Integer作为返回类型,因为该类型在您的实现中代表T