Então, estou fazendo 2 construtores. Eu estou tentando passar 2 variaveis byte e uma int como parâmetro para um metodo.
Quanto a int sem problemas, mas a byte eu nao consigo fazer.
Eu lembro que variaveis tipo float nós fazemos " 33.2f ", por exemplo. Gostaria de saber entao como declarar a byte.
[code]public class Data {
private byte dia;
private byte mes;
private int ano;
public Data() {
this ();
}
public Data(byte dia, byte mes, int ano){
setDia(dia);
setMes(mes);
setAno(ano);
}
[/code]
Ou só usando cast?tipo ((byte)2) por exemplo
Fazendo cast seria uma forma mais simples, como abaixo:
Data d = new Data((byte)9, (byte)11, 1981);
Na verdade mais simples seria usar o int, porque o problema de usar o byte em outros métodos é esse, que para passá-lo como argumento tem que fazer a conversão, mesmo lá do outro lado o parâmetro tendo o tipo certo.
Por isso o mais usado na maioria dos casos é o int.
Eu recomendaria a você usar o int. A diferença de desempenho é minima, a não ser que você esteja fazendo uma aplicação para uma calculadora kkkkk
Se seu sistema for ser paranóico com espaço ocupado, declare o ano também como short ao invés de int.
A paranoia hard seria representar o mês e o ano em uma única variável short (4 bits para o mês, 12 bits para o ano).
Caso contrário, declare tudo como int. Ocupa um pouco mais de memória, mas é mais fácil de lidar e tem melhor performance.
Esse seria um modo extremamente econômico de se fazer:
[code]public class Data {
private static final int MES_MASK = 0xF000;
private static final int ANO_MASK = 0x0FFF;
private static final int MES_SHIFT = 12;
private static final int ANO_SHIFT = 0;
private byte dia;
private short mesAno;
public Data() {
this(15, 9, 1980);
}
public Data(int dia, int mes, int ano) {
// Cuidado. Se se chama métodos da própria classe no construtor se eles
// forem final ou private!
setDia(dia);
setMes(mes);
setAno(ano);
}
public final void setAno(int ano) {
ano = ano << ANO_SHIFT & ANO_MASK;
mesAno = (short) (mesAno & ~ANO_MASK | ano);
}
public final void setMes(int mes) {
mes = mes << MES_SHIFT & MES_MASK;
mesAno = (short) (mesAno & ~MES_MASK | mes);
}
public final void setDia(int dia) {
this.dia = (byte) dia;
}
public int getDia() {
return dia;
}
public int getMes() {
return (mesAno & MES_MASK) >> MES_SHIFT;
}
public int getAno() {
return (mesAno & ANO_MASK) >> ANO_SHIFT;
}
@Override
public String toString() {
return String.format("%02d/%02d/%02d", getDia(), getMes(), getAno());
}
public static void main(String[] args) {
//Veja, funciona mesmo!
System.out.println(new Data());
System.out.println(new Data(21, 12, 2022));
System.out.println(new Data(31, 01, 4000));
}
}[/code]
Mais econômico que isso, só transformando os campos internos da data em um contador, indicando um número de dias desde um determinado período de tempo.
Como 2 bytes podem armazenar 65.536 dias, você teria então um período de 179 anos de intervalo para guardar.