3

私には2つのクラスがあります:

class ItemInfo {

   public View createItemView() {
       View v;
       // ...
       v.setTag(this); 
       return v;
   }
}

class FolderInfo extends ItemInfo {

    @Override
    public View createItemView() {
        View v;
        // ...
        v.setTag(this);
        return v;
    }
}

それから私はそれを使います:

FolderInfo folderInfo;
// Create it here
ItemInfo itemInfo = folderInfo;
View v = itemInfo.createItemView();
Object objectTag = v.getTag();

次に、instanceofでobjectTagのタイプを確認します。これはItemInfoです。なんで?

4

4 に答える 4

8

これを行う場合:

if (itemInfo instanceof ItemInfo) {
    System.out.println("OK!");
}

は-のサブクラスである"OK!"ため、もちろん印刷されていることがわかります。したがって、aもオブジェクトです。FolderInfoItemInfoFolderInfoItemInfo

継承とは、サブクラスからスーパークラスへの「isa」関係があることを意味します。リスコフの置換原則を参照してください。

于 2012-07-12T11:21:08.147 に答える
1

次のように入力して確認できます。

if (iteminfo instanceof FolderInfo) {
// do what you want
}
else if (iteminfo instanceof ItemInfo) {
// do what you want
}
于 2012-07-12T11:26:43.910 に答える
0

InstanceOfIS A関係のチェックです。

if(ChildClass instanceOd ParentClass)は常にあなたを返しますtrue。すべてのクラスがインターフェースAを実装していても、(AllClassess instanceOf A)

あなたの場合、 FolderInfoItemInfoです。

于 2012-07-12T11:24:32.447 に答える
0

Enumerationすべてのタイプの定義を使用することをお勧めします。

上記のコードは次のようになります。

class View {
    public ItemInfo getTag() {
       return tag;
    }
}

enum ItemType {
    FolderType,
    FileType
};


class ItemInfo {
  private abstract ItemType getType();

 public View createItemView() {
   View v;
   // ...
   v.setTag(this); 
   return v;
  }
}

class FolderInfo extends ItemInfo {

private  ItemType getType() {
  return ItemType.FolderType;
}
@Override
public View createItemView() {
    View v;
    // ...
    v.setTag(this);
    return v;
  }
}

これにより、次のようなより適切できちんとしたコードを書くことができます

switch(itemType) {
      case ItemType.FolderType:
          //handle folder type
          break;
      case ItemType.FileType:
          //handle folder type
          break;
}

そして、あなたがタイプをチェックしたいところはどこでも、あなたはこのようにチェックすることができます:

  if( itemInfo.getType() == ItemType.FolderType) {
  }
于 2012-07-12T11:27:58.767 に答える