問題タブ [auto-value]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - ネストされたクラスで @AutoValue を使用すると、「シンボルが見つかりません」というエラーが発生します
ネストされたクラスで@AutoValueを使用しようとする場合:
のコンパイラ エラーcannot find symbol
が発生しAutoValue_Example
ます。私が間違っていることについてのアイデアはありますか?
java - Eclipse AutoValue クラスのビルドに失敗する
m2e および m2e-apt プラグインに接続された Maven 3.1.1 を使用して Eclipse Kepler SR2 を実行していますが、解決方法がわからないというエラーが表示されます。
pom.xml で機能するために必要なすべての依存関係を見つけることができました@AutoValue
が、現在、定義する必要があるメソッドがすべてプリミティブな戻り値の型を持っている場合にのみ機能する状態になっています。Object
またはより具体的なものを返す抽象ゲッターを提供すると、次のエラーが発生します。
私は基本を試しました-mavenキャッシュをクリアし、Eclipseを再起動し、プロジェクトを再構築しました...サイコロはありません。そのため、ソース コードを掘り下げたところ、どのように解決するつもりなのかわからない不一致が見つかりました。
生成された AutoValue クラスのVelocity テンプレートには、プリミティブをオブジェクトとは異なる方法でレンダリングするための基本的なロジックがいくつかあります。たとえば、37 行目p.nullable
でチェックされます。p
変数は class のインスタンスでありAutoValueProcessor$Property
、前のリンクの 205 行目に見られるように、メソッドはありますが、メソッドやプロパティisNullable()
はありません。nullable
では、Velocity レンダリング フェーズはどのように機能するのでしょうか? Velocityは何らかの理由で自動拡張p.nullable
されますか? p.isNullable
これはバグですか?ここからどうすればいいのかわからない。
コンパイルされないクラスの例:
EclipsePoint
は、クラス宣言の先頭で説明されているエラーを強調表示します。
java - @AutoValue - 「生成されたシンボル クラスが見つかりません」エラー
@AutoValue アノテーションを使用しているときに、「生成されたシンボル クラスが見つかりません」というメッセージが表示されます。
Gradle 依存関係コンパイル 'com.google.auto.value:auto-value:1.0-rc1'
また、選択したプロパティのみを equals および hashcode 関数に追加する方法。
java - Java から Groovy ビルダーを呼び出す
私は Groovy (私にとっては新しい) を使用して、Java 値オブジェクト クラスを Groovy と同等のものに置き換え、残りの Java コードベースとの互換性を維持しながら、よりクリーンで簡潔なコードを取得しようとしています。(この試行が失敗した場合、Google にフォールバックする可能性があります@AutoValue
。)
値オブジェクトは、ビルダー パターンを使用して Java コードからインスタンス化できます。セッター メソッドはプレフィックスなしである必要があり、理想的にはビルダーは、構成可能な名前を持つ静的メソッドを介してインスタンス化できる必要があります。
@groovy.transform.builder.Builder
のJavadocは、「Java統合が必要な場合」に使用できると述べており、有望に見える構成パラメーターもあることがわかりますが、Javaコードから使用する方法がわかりませんでした。
これは、X を何に置き換えたらよいかわからない場合の試みです。
Greeting.groovy:
GroovyGreetingTest.java:
編集: 2 つのクラスが生成されtarget/classes/com/hello/GroovyGreeting.class
ますtarget/classes/com/hello/GroovyGreeting$com/hello/GroovyGreetingBuilder.class
。そこにある '$' は本当に奇妙で、それを参照できません (import com.hello.GroovyGreeting$com.hello.GroovyGreetingBuilder
違法です)。また、何らかの理由でIntelliJ IDEAでは逆コンパイルできますGroovyGreetingBuilder.class
が、できませんGroovyGreeting.class
(開こうとしても反応しません)。
java - AutoValue を使用した GWT シリアライゼーション例外
AutoValue のドキュメントによると、@GwtCompatible(serializable = true)で抽象クラスに注釈を付け、serializableを実装するだけで、生成された値クラスを GWT RPC で使用できるようになります。それでも、以下のクラスでは、次のエラーが発生します。
さまざまなバリアント(通常のシリアライズ可能のみを実装するなど)を試しましたが、成功しませんでした。クラスの何が問題になっていますか?
Gradle ファイルに含まれるもの
GWT バージョン: 2.6.0
java - AutoValue での JDBI @BindBean の使用
TLDR; 生成された型はパッケージ プライベートであり、デフォルトではリフレクションを使用してデフォルトでアクセスできないため、
JDBI@BindBean
アノテーションはwith AutoValue で生成された型を生成します。IllegalAccessException
JDBI は柔軟性がないのでしょうか、それとも AutoValue による回避策はありますか? (以下の質問全文)
簡単な背景
ソースが AutoValue を使用して生成された型でJDBI@BindBean
アノテーションを使用しようとしています。
問題は、生成されたコードが次のようになることです。
クラスがパッケージ プライベートであることに注意してください。
を使用しようとする@BindBean
と、たとえば次のようになります。
AutoValue_Foo
パッケージは非公開であり、BindBeanFactory
リフレクションを使用するためfind
、AutoValue_Foo
型で呼び出しを試みると、結果は次のようになります。
関連する JDBI コードはこちらです。Java リフレクションの観点からは、これを使用して解決できることは理解していますsetAccessible(true)
が、それには JDBI への PR が必要です。
したがって、質問は次のとおりです。
新しい JDBI マッパーを作成せず
Foo
にタイプAutoValue_Foo
をバインドできるコードを再構築する方法はありますか?@BindBean
@AutoValue
であるクラスを生成 する方法はありますかpublic
。これが一般的に望ましくない理由を理解しています(人々に実装ではなくインターフェイスを使用するように促します)。BindBeanFactory
柔軟性がありませんか?setAccessible(true)
元のパッケージの外部で利用可能なメソッドを利用する必要 がありますか?