public class EmployeeImpl implements Employee {
private Integer id;
private String name;
private Wage wage;
public abstract class EmployeePersistenceStrategy implements
PersistenceStrategy {
public void test() {
id = 1; // olha, eu tenho acesso!
}
public abstract List getAllByWage( Double wage );
public abstract List getAllByExtra( Double extra );
public abstract void deleteAllFired( Date initialDate, Date finalDate );
}
}
public class EmployeePersistenceStrategyHibernate extends
EmployeeImpl.EmployeePersistenceStrategy
{
public EmployeePersistenceStrategyHibernate() {
}
// implementação dos métodos
}
Recebo este erro de compilação na declaração do construtor da EmployeePersistenceStrategyHibernate:
No enclosing instance of type EmployeeImpl is available due to some intermediate constructor invocation
o problema ai esta no modo em como a maquina virtual do java resolve
suas classes…ela simplismente não pode acessar uma classe interna
sem que a mais externa esteja resolvida…
porem se a sua inner class fosse static dai daria certo…mas acho que
classes estaticas não podem ser abstratas…
[]´s dyorgio
Cara dá certo sim.
Vc pode ter uma classe estatica e abstrata e pode usa-la por herança.
Também cheguei a uma arquitetura identica a sua depois daquela discussão sobre atributos privados e mecanismos de persistencia.
Fiz um teste e funcionou.
Isso dá certoi sim…
Tenta isso
public class EmployeeImpl implements Employee {
private Integer id;
private String name;
private Wage wage;
public static abstract class EmployeePersistenceStrategy implements
PersistenceStrategy {
protected int id;
public void test() {
}
// pegue o valor do objeto passado
public void save(Employee e) {
this.id = e.id; // olha, eu tenho acesso!
}
public abstract List getAllByWage( Double wage );
public abstract List getAllByExtra( Double extra );
public abstract void deleteAllFired( Date initialDate, Date finalDate );
}
}
public class EmployeePersistenceStrategyHibernate extends
EmployeeImpl.EmployeePersistenceStrategy
{
public EmployeePersistenceStrategyHibernate() {
}
// implementação dos métodos
public void save(Employee e)
{
super.save(e);
id // tem valor e posso ver
]
}
Desse jeito vc faz fazer referencia a uma instancia vazia.
O que importa é ter acesso aos atributos de uma instancia já criada ou criar uma dentro da inner class.
E tem mais tente acessar o id da subclasse;
Realmente essa explicação tá uma b…
Mas vc não entendeu o código ou a explicação.
Do jeito que vc colocou a subclasse não tem acesso a variavel privada da outerclass.
Vc tem que acessar os atributos da outerclass de dentro da innerclass agora isso não pode ser através da subclass da innerclass
:shock: (que mer…)
Persistencia é um aspecto. Então estendo minha classe Pessoa em PessoaPersistivel.
E se houver outro aspecto? Visualização por exemplo, vou estender novamente? PessoaView extends PessoaPersistivel?