java中的错误通用方法

时间:2011-09-15 17:08:13

标签: java

package com.openwaf.test.basic;
public class MethodArgumentTest {
    static interface Inf{}
    static class One<E extends Inf > implements Inf{
        public <T extends One> T get(T k){
            return k;
        }
    }
    static class Two<E extends Inf> extends One<E>{ }
    public static void test(){
        One o=new One<Inf>();
        Two t=new Two<One>();
        o.<Two>get(t);
    }
}

以上代码仅用于测试目的。恕我直言,它应该编译没有任何问题,但java编译器说

  

MethodArgumentTest.java:15:   get(com.openwaf.test.basic.MethodArgumentTest.One)in   com.openwaf.test.basic.MethodArgumentTest.One无法应用于   (com.openwaf.test.basic.MethodArgumentTest.Two)

     

o.get(T);

     

1错误

有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:1)

好的,正如你所说这只是为了测试我不会问这个代码有什么用处。以下编译但仍会产生警告。你没有足够的定义泛型:

public class MethodArgumentTest {
    static interface Inf {
    }

    static class One<E extends Inf> implements Inf {
        public <T extends One<E>> T get(T k) {
            return k;
        }
    }

    static class Two<E extends Inf> extends One<E> {
    }

    public static void test() {
        One<Inf> o = new One<Inf>();
        Two<One<Inf>> t = new Two<One<Inf>>();

        o.<Two> get(t); /* unchecked warning */
    }
}

答案 1 :(得分:0)

我认为你需要做的是

Two tPrime= o.get(t);