• 13-06-2019, 18:59:01
    #1
    Merhaba a şeklinde bir class olsun.Bu a nın 3 parametreden oluştuğunu varsayalım.

    uzunluk, yükseklik, isim gibi.

    Ben bu parametreleri kullanıcıdan veri almadan kontrol etmek istiyorum.Daha doğrusu illaki veri giriş olacak oraya fakat bu işlemleri constructorun içinde yapmak istiyorum.

    Gelen sayı integer mi ?Integersa uzunluğu 9 rakamdan büyükse default bir integer belirlemek gibi.

    Aslında oracle sitesinden yapmaya çalıştığıma yakın bir şey buldum ama hepsini karşılamıyor.

    public class Employee {... public Employee (@NotNull String name) { ... } public void setSalary( @NotNull @Digits(integer=6, fraction=2) BigDecimal salary, @NotNull @ValidCurrency String currencyType) { ... }...}
    Bu tip kontrol işlemlerini o class in içinde yapmanın mantığı nedir ?
  • 13-06-2019, 19:45:10
    #2
    -Bu tip kontrol işlemlerini o class in içinde yapmanın mantığı nedir ?
    Nesne oluşurken kontrol etmenin amacı, şartları sağlamıyorsa oluşmasını engellemektir. Null olamaz diye belirttiğin bir alan, null olarak geliyorsa ilgili nesnenin oluşmasını engellemiş olursun.
  • 13-06-2019, 19:55:36
    #3
    maviuan adlı üyeden alıntı: mesajı görüntüle
    -Bu tip kontrol işlemlerini o class in içinde yapmanın mantığı nedir ?
    Nesne oluşurken kontrol etmenin amacı, şartları sağlamıyorsa oluşmasını engellemektir. Null olamaz diye belirttiğin bir alan, null olarak geliyorsa ilgili nesnenin oluşmasını engellemiş olursun.
    Temel olarak aynı şeyden bahsediyoruz zaten fakat main classı yok elimde sadece constructor içine erişimim var aslında benim çektiğim sorun şu :

    public Account(String x, String y, double z) { } constructor bu şekilde fakat y değeri integer olmak zorunda bir kaç koşul daha var.(8 rakamdan fazla oluşmalı vs gibi.)

    y yi parseInt ile integera çevirdiğimde bunu aşabiliyorum fakat girilen string değeri a123 de olabilir bu şekil bir ifade geldiğinde hata vermesini istemiyorum düzgün bir hata mesajı bassın.Bunu da try-catch bloguyla hallettim fakat bu seferde şöyle bir sorun oldu.Sayıyı try blogu içinde çevirdiğim için 2.işlemi yapamıyorum yani o sayı da 8 rakamdan fazla mı var kontrol etmek için tekrar parseInt i bir daha kullanıyorum bunun hoş olmadığını düşündüğüm için açtım konuyu farklı bir kullanımla tekrara düşmeden nasıl yapılır ? Ayrıca bu koşul sağlanmıyorsa o değerin set olmaması lazım zaten.
  • 13-06-2019, 23:09:39
    #4
    y parametresini göndermeden önce aşağıdaki gibi bir fonksiyonla kontrol et. False dönüyorsa zaten Account classını hiç çağırmamış olursun. Her seferinde hatalı parametre ile classı çağırmak ve exception'a düşürmek bile başlı başına farklı bir sorun olur.

    public boolean isInteger( String input )
    {
    try
    {
    Integer.parseInt( input );
    return true;
    }
    catch( Exception e)
    {
    return false;
    }
    }
  • 15-06-2019, 03:20:18
    #5
    perkosan adlı üyeden alıntı: mesajı görüntüle
    y parametresini göndermeden önce aşağıdaki gibi bir fonksiyonla kontrol et. False dönüyorsa zaten Account classını hiç çağırmamış olursun. Her seferinde hatalı parametre ile classı çağırmak ve exception'a düşürmek bile başlı başına farklı bir sorun olur.

    public boolean isInteger( String input )
    {
    try
    {
    Integer.parseInt( input );
    return true;
    }
    catch( Exception e)
    {
    return false;
    }
    }

    Hocam ilk yazdığım fonksiyon bire bir buydu lakin boolean tipinde döndüğümde sayıya erişemiyorum.Sayının integer olup olmadığını kontrol ettikten sonra o sayı ile işlem yapmam gerekiyor.Bunun sebebi basamak sayısı da gerekli.
    public int x(String a){

    int n = a.length();


    if(n>6)
    {

    if(isInteger(a)==true)
    {
    return Integer.parseInt(a);
    }else{ return 0;}
    }else{

    a=null;

    }
    burda dönecek return kısmını yazamıyorum.
    }