Clases de herencia
Tengo dos clases:
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; } }
Entonces lo uso:
- ¿Cómo funciona finish () en el evento OnClick?
- ¿Qué significa 'SRPy' en la documentación de Mockito
- ¿Cómo se puede utilizar una interfaz para diferentes tareas de fondo android?
- Elija la subclase a extender desde el momento de la ejecución en java
- ¿Hay un patrón de diseño para reducir la duplicación de código cuando subclases Actividades en Android?
FolderInfo folderInfo; // Create it here ItemInfo itemInfo = folderInfo; View v = itemInfo.createItemView(); Object objectTag = v.getTag();
Entonces compruebo el tipo de objectTag por instanceof, y es ItemInfo! ¿Por qué?
- ¿Cuándo debe y no debe romperse de OOP para velocidad / rendimiento?
- OOD y pasando la actividad como un parámetro a los constructores de otras clases
- ¿Cuál es la lógica de diseño detrás de Fragmentos como clases internas estáticas vs clases públicas independientes?
- ¿Declarar las variables locales tan tarde como sea posible o en la llave más cercana que pertenecen?
- ¿Deshacer / rehacer rápidamente con el patrón del memento / comando?
- Pasar objetos que extienden una clase abstracta entre actividades
- Android y OOP - Variables globales vs heredados Getters en fragmentos
- Compartir código entre fragmentos
Si haces esto:
if (itemInfo instanceof ItemInfo) { System.out.println("OK!"); }
Usted por supuesto ver "OK!"
ya que FolderInfo
es una subclase de ItemInfo
– por lo que un FolderInfo
es también un objeto ItemInfo
.
La herencia significa que hay una relación "es una" de la subclase a la superclase – vea el principio de sustitución de Liskov .
Puede comprobar escribiendo:
if (iteminfo instanceof FolderInfo) { // do what you want } else if (iteminfo instanceof ItemInfo) { // do what you want }
InstanceOf
es una comprobación de la relación IS A
if ( ChildClass instanceOd ParentClass
) siempre devuelve true
. incluso todas las clases implementan interfaz A
pasará la prueba de (AllClassess instanceOf A)
En su caso FolderInfo es un ItemInfo .
Le sugeriría que utilice Enumeration
define todos los tipos.
Así es como se verá el código anterior:
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; } }
Que le permitirá escribir código mejor y ordenado como este :
switch(itemType) { case ItemType.FolderType: //handle folder type break; case ItemType.FileType: //handle folder type break; }
Y donde quieras comprobar el tipo que puedes comprobar como esto:
if( itemInfo.getType() == ItemType.FolderType) { }
- Agregar un botón a la pantalla de llamadas entrantes predeterminada en Android
- Error: no se puede encontrar la variable de símbolo GL_TEXTURE_EXTERNAL_OES + OpenCV en Android Studio