0

以下のコードセグメントでは、疑問符はクラスタイプごとに山かっこで囲まれているため、何ができますか?任意のクラスタイプをパラメーターとして渡すことができますか?

また、メソッド1は何を返しますか?ObjectServiceタイプにキャストできるオブジェクトを返しますか?

方法1

public Object getInstance(Class<?> clazz) {
    if (org.service.ObjectService.class.equals(clazz))
        return getObjectService();
    return null;
}

方法2

public ObjectService getObjectService() {
    ObjectService service;

    service = (ObjectService) context.getBean("ObjectService");

    return service;
}
4

1 に答える 1

1

これは、任意のタイプのクラスをパラメーターとして受け入れるようにコンパイラーに指示します。基本的に、この方法では、コンパイラの型チェックをオフにすることを選択します。または、コンパイラの警告とともに完全に省略する<?>か、Luiggiが提案したように実行して、を指定することもできますClass<Object>が、これは常に同じとは限りません。

ジェネリッククラスが制限付きで定義されている場合、<Object>は受け入れ可能なパラメーターではありません。

たとえば、どこかに次のクラスがある場合:

public class TheClass<T extends Component> {
}

あなたはできませんTheClass<Object>TheClass<Component>またはを行うことができますTheClass<?>。これは、TheClassの場合と基本的に同じです。


更新された質問に答えるための更新

この場合のgetInstance()は、ObjectServiceのみを返すことができるgetObjectService()に延期されます。次のいずれかを受け取ることが保証されています。

  • ObjectServiceインスタンス。
  • ヌル。
  • キャストが実行されるgetObjectService()メソッドからのClassCastException。
于 2013-02-27T19:51:46.270 に答える