2017-06-05 36 views
-3

我在采访中碰到这个问题就来了,那如何让没有final关键字变量不断在Java制作一个变量不变,而无需使用final关键字

+0

相当愚蠢的面试问题,而不是真正需要在现实生活中做这样的事情。接口中的常量是非常非常糟糕的代码气味。没有人用这种方式编程是件好事,不知道/记住这个更好,不要被诱惑:) –

+0

@MadaraUchiha我不认为这个问题太宽泛 - 它具体到面试的背景下提供一个明确的答案。 – dasblinkenlight

回答

3

我怀疑他们在寻找一个答案“内声明的变量一个界面“。根据Java语言规范,在接口中声明的所有变量都默认为static和final:

interface Foo { 
    int BAR = 100; 
} 
class Test { 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     System.out.println(Foo.BAR); 
    } 
} 
+0

很好的答案,但这样的面试问题的目的是什么?检查你是否是好程序员?好的程序员首先不会在Interaces中创建常量。 –

+1

@KrzysztofCichocki我不是这个面试问题的人,所以我不能告诉你这个问题的目的。对我来说,这是一个合法的Java语言难题。 – dasblinkenlight

+0

好吧,在相同的风格有一个伟大的难题:是否有可能在Java中抛出检查异常从dosn't不声明它的方法?是。但是如果你这样做,那么你是一个糟糕的程序员,那么当这个问题有什么价值的时候,有人知道这个问题的答案,当有更多更重要的事情需要知道时? –

0

您可以强制这样的变量是有效的决赛。例如,在流中使用它。

int a = 1; 
Stream.of(1, 2, 3, 4, 5).map(e -> e + a).forEach(System.out::println); 

a = 12; // this line leads to a compile error 
相关问题