Javaの(コマンドライン)コンパイラからではなく、Eclipseのコンパイラから正常にコンパイルして機能するジェネリックを使用してGuiceバインディング・コードを使用しています。最新(1.7.0_01)のJava SDKにアップグレードしましたが、引き続き次のエラーが発生します。Javaジェネリック・エラー:コマンドライン・コンパイラからの互換性のないタイプ
[error] ...\BindCategorySelectorActivity.java:42: error: inconvertible types
[error] (Class<? extends ListAdapterDataProvider<Row<? extends DatabaseItem>>>) CategoryDataProvider.class);
[error] ^
[error] required: Class<? extends ListAdapterDataProvider<Row<? extends DatabaseItem>>>
[error] found: Class<CategoryDataProvider>
[error] 1 error
[error] {file:/.../compile:compile: javac returned nonzero exit code
関連するコード:
public interface Category extends DatabaseItem {}
public class CategoryDataProvider implements
ListAdapterDataProvider<Row<Category>> {}
public class BindListViewHandlerWithSpecificProvider extends AbstractModule {
public BindListViewHandlerWithSpecificProvider(
Class<? extends ListAdapterDataProvider<Row<? extends DatabaseItem>>>
dataProviderClass) {}
}
@SuppressWarnings("unchecked")
// Error happens here:
final BindListViewHandlerWithSpecificProvider
bindListViewHandlerWithSpecificProvider =
new BindListViewHandlerWithSpecificProvider(
(Class<? extends ListAdapterDataProvider<Row<? extends DatabaseItem>>>)
CategoryDataProvider.class);
まあ、それはコンパイルするために管理が、私はもしわからないが戻しますオブジェクトに余分なキャストを追加するだけで問題が隠されました。 Guiceはバインドしようとするとnullポインタ例外が発生してクラッシュします。そのレポートが 'bindListViewHandlerWithSpecificProvider'にアクセスしている行です。そして、この同じコードは、Eclipse内でビルドされるとエラーなしでコンパイルされ、実行されます。 –
私はそれが好奇心の行動だと認めます。 Objectへの余分なキャストを行うと、sideCastからjavacを欺くこと以外に何もしません。あなたは効果的に同じプログラムで終わるべきです。 –
Guiceがジェネリックのサポートを追加したことや、パラメータ化された型を渡すためのより良いメカニズムがあることに精通していますか? Scalaがパラメータ化された型を渡すためのより良いサポートを提供するかどうか? –