Sto affrontando un caso d’uso in cui vorrei dichiarare un campo static final con un’istruzione initializer dichiarata per lanciare un’eccezione controllata. In genere, sarebbe simile a questo: public statico finale ObjectName OBJECT_NAME = new ObjectName (“foo: type = bar”); Il problema che ho qui è che il costruttore ObjectName può lanciare varie eccezioni controllate, che […]
public class A { private static final int x; public A() { x = 5; } } final significa che la variabile può essere assegnata una sola volta (nel costruttore). static significa che è un’istanza di class. Non riesco a capire perché questo è proibito. Dove queste parole chiave interferiscono tra loro?
Qual è lo scopo della parola chiave final in C ++ 11 per le funzioni? Capisco che prevenga la funzione che sovrascrive le classi derivate, ma se questo è il caso, allora non è sufficiente dichiarare come non-virtuali le tue funzioni final ? C’è un’altra cosa che mi manca qui?
è permesso in java: for(int i=0;i<5;i++){ final int myFinalVariable = i; } La parola chiave della mia domanda è final . È permesso fare una variabile finale che cambia ad ogni giro del ciclo? Mi stavo chiedendo questo perché la finale dice che non è ansible modificare il valore della variabile (chiamando solo myFinalVariable = […]
Poiché ritengo sia una buona pratica di programmazione, realizzo tutte le variabili (locali o di istanza) final se sono destinate a essere scritte una sola volta. Tuttavia, noto che quando un’assegnazione di variabili può generare un’eccezione, non è ansible effettuare detta variabile finale: final int x; try { x = Integer.parseInt(“someinput”); } catch(NumberFormatException e) { […]
class Foo{ public static void main(String args[]){ final int x=101; int y; if(x>100){ y=-1; } System.out.println(y); } } Il compilatore Java capisce che la condizione dell’istruzione if è sempre vera e pertanto verrà sempre inizializzato. Nessun errore di compilazione, come previsto. class Bar{ public static void main(String args[]){ final int x; x=101; int y; if(x>100){ […]
class WithPrivateFinalField { private final String s = “I’m totally safe”; public String toString() { return “s = ” + s; } } WithPrivateFinalField pf = new WithPrivateFinalField(); System.out.println(pf); Field f = pf.getClass().getDeclaredField(“s”); f.setAccessible(true); System.out.println(“f.get(pf): ” + f.get(pf)); f.set(pf, “No, you’re not!”); System.out.println(pf); System.out.println(f.get(pf)); Produzione: s = I’m totally safe f.get(pf): I’m totally safe s […]
La documentazione del linguaggio Java dice: Se un tipo primitivo o una stringa è definita come una costante e il valore è noto al momento della compilazione, il compilatore sostituisce il nome della costante ovunque nel codice con il suo valore. Questa è chiamata costante di compilazione. La mia comprensione è se abbiamo un pezzo […]
Sto solo cercando di capire perché tutti i campi definiti in un’interfaccia sono implicitamente static e final . L’idea di mantenere i campi static ha senso per me dato che non puoi avere oggetti di un’interfaccia, ma perché sono final (implicitamente)? Qualcuno sa perché i progettisti Java sono andati a rendere i campi in un’interfaccia […]
Ero solito pensare che private val e private val private final val sono uguali, fino a quando ho visto la sezione 4.1 in Scala Reference: Una definizione di valore costante è della forma final val x = e dove e è un’espressione costante (§6.24). Il modificatore finale deve essere presente e nessuna annotazione del tipo […]