Pergunta

Eu passei pelo seguinte tutorial:

http://www.javaworld.com/community/node/2915

E depois de ler o artigo acima, sinto que não é possível escrever uma interface marcador, porque, como você pode instruir o compilador, que, que tag, ela incorporou no arquivo .class para sua interface marcador.

Por favor corrija-me se eu estiver errado. Felicidades :)

Foi útil?

Solução

Aqui, a tag é o código decimal hexa, que é adicionado ao arquivo .class dessa classe que implementa interface serializável. Portanto, essa JVM trata esse arquivo de classe de uma maneira especial (pode ser um trabalho de alocação de recursos pesados), porque a instância dessa classe pode ser serializada. Para aulas normais, acrescenta hexadecimal.

AHA !! Eu entendo sua confusão.

  • CA FE o número mágico para um arquivo bytecode; ou seja, o arquivo que você recebe quando compila uma classe. O arquivo bytecode para qualquer classe tem esse número mágico, seja serializável ou não serializável.

  • AC ED é o número mágico um arquivo de objeto java serializado; ou seja, o arquivo que você serializa em uma instância de alguma classe serializável.

Você está misturando dois conceitos diferentes (classes e instâncias) e suas respectivas representações.

Portanto, a resposta para sua pergunta é ... é claro que você pode escrever suas próprias interfaces de marcador! Não há nada de especial para o compilador sobre uma classe que implementa uma interface marcador.

no entanto gostaria Seja impossível duplicar a implementação da deserialização do objeto Java em Java puro. A deserialização do objeto usa um backdoor (o Unsafe.allocateInstance método) para criar objetos sem invocar seus construtores. AFAIK, esse método não pode ser chamado do código Java normal. (E mesmo que puder, não deveria ser ...)

Outras dicas

Claro que você pode escrever uma interface marcador. Uma interface marcador geralmente é apenas uma interface sem métodos (para que qualquer classe possa implementá -la).

Você parece pensar que as interfaces marcadoras têm algumas propriedades mágicas que fazem algo por conta própria. Esse não é o caso. Em vez disso, alguns outro O código pode reagir à presença da interface do marcador em algum objeto e agir de maneira diferente quando uma classe o implementa. Mas a própria interface do marcador não faz nada .

package com.example;
interface MarkerInterface {}

Aqui você tem um. Apenas Copypaste com/example/MarkerInterface.java, Compile e use -o!

Aqui está um exemplo de uso:

class SomeClass implements MarkerInterface {
    // ...
}

Eu não acho que seja possível fora da caixa!Os campos calculados são baseados nos dados e não no tipo de contêiner!

Você tem que fazer isso através de código personalizado ou através de um fluxo de trabalho!ou ter uma coluna extra que denota se é uma pasta como bool sim não e use o campo calculado nessa coluna

Depende do que você entende como uma interface marcador. Mas em geral, você pode usar instanceof Em seu código para verificar se uma instância implementa uma interface marcador e depois faça algo com esta instância ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top