0
public class method
{
    private static class Foo
    {
        public void hello() { System.out.println("Foo"); }
    }

    private static class Bar
    {
        public void hello() { System.out.println("Bar"); }
    }

    private static <T> void hello(T typ)
    {
        typ.hello();
    }

    public static void main(String args[])
    {
        Foo foo = new Foo();
        Bar bar = new Bar();
        hello(foo);
        hello(bar);
    }
}

ここでジェネリクスに関する他の質問を見てきましたが、そこにあるすべてのことを見て、私が書いたコードに適用したにもかかわらず、Java コードにまだ問題があります。私が抱えている問題を上記のコードに煮詰めました。上記の codd をコンパイルしようとすると、次のエラーが発生します。

method.java:15: error: cannot find symbol
        typ.hello();
           ^
  symbol:   method hello()
  location: variable typ of type T
  where T is a type-variable:
    T extends Object declared in method <T>hello(T)

ジェネリックを使用して設計されていないことをしようとしている可能性がありますが、ドキュメントの理解に基づいて、これは機能するはずです。もちろん、私はこのようなことができるという考えでドキュメントを読みました。それは確かに私の理解に影響を与えたかもしれません.

ありがとう

4

4 に答える 4

4

問題は次のとおりです。

private static <T> void hello(T typ)

T は、"Hello" という名前のメソッドを実装するものを拡張しません。

代わりに、

 private static <T extends ClassThatHasHello> void hello(T type)

そしてクラス:

 public class ClassThatHasHello {
      public void hello() { }
 }
于 2013-05-17T20:51:00.557 に答える
-2

ジェネリックを使用していて、T 型の hello メソッドを呼び出そうとしていますが、その型がわかりません。hello メソッドがあることが確実な場合は、キャストを使用します

于 2013-05-17T20:51:14.260 に答える