2

私はsmaliを使用して次のことを行おうとしています:

  1. ArrayListクラスにプライベートインスタンスフィールドを追加する
  2. クラスのコンストラクターでインスタンスフィールドをインスタンス化します
  3. addクラスのメソッドの1つでフィールドに対して操作を実行します。

これらは、関連するコードスニペットです。(私のクラス名はcom.mypackage.MyClass(ie com/mypackage/MyClass))

# instance fieldssmaliコードのセクションに、次の行を追加しました

.field private myList:Ljava/util/List;

パブリックコンストラクターメソッド(.method public constructor <init>()V)で、行を追加しました

new-instance v1, Ljava/util/ArrayList;
invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V
iput-object v1, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;

そして最後に、メソッド呼び出しを実行したいインスタンスメソッドにadd、行を追加しました

iget-object v6, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;
invoke-interface {v6, v3}, Ljava/util/List;->add(Ljava/lang/Object;)Z
invoke-interface {v6, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z

ただし、ライン

iget-object v6, p0, Lcom/mypackage/MyClass;->myList:Ljava/util/List;

エラーが発生します(logcatによる)

10-29 15:47:58.999: W/dalvikvm(518): VFY: 'this' arg 'Ljava/util/List;' not instance of 'Lcom/mypackage/MyClass;'

同じメソッドの同様のメソッド呼び出しで行ったことを比較したところ、何が問題だったのか理解できませんでした。

何か案が?

ありがとう!

4

1 に答える 1

2

p0レジスタには、メソッドが入るときに「this」参照が含まれていますが、後で何でも変更できます。そのエラーメッセージに基づくと、iget-objectがあるポイントで、p0regsiterにListオブジェクトが含まれているように見えます。

于 2012-10-29T08:45:28.537 に答える