标签: final

java中的最终字段继承

是否可以让给定的子类在其超类中初始化静态最终字段?基本上我希望子类配置所需的类范围变量.不幸的是,abstract关键字并不完全适用于字段..

java inheritance final field

1
推荐指数
1
解决办法
1548
查看次数

Java - 静态和最终变量

我知道这不起作用,但它只是一个例子,所以我可以理解为什么它不起作用.

public class MyClass {

    final static JButton b;

 public void myMethod() {
   b = new JButton("Hello!");
 }
 }
Run Code Online (Sandbox Code Playgroud)

1)为什么final static JButton b;线路出错?当我删除static关键字时,为什么这个错误会消失?

2)有或没有static关键字,行有一个错误b = new JButton("Hello!"); 我想知道为什么这是?我认为在方法中实例化最终变量是可以的.

java static final

1
推荐指数
1
解决办法
3297
查看次数

我需要设置一个变量,但我也需要它是最终的.

在下面的代码中,第一个if语句抱怨current_guy不能是a,final但第二个if语句抱怨current_guy不是最终的.我没有想法.

final int current_guy=0;

if (a.equals("bf")){
   current_guy=1;
}

guy1.setOnClickListener(new OnClickListener() {    
   public void onClick(View v) {

   if (current_guy==1) {
      // TODO Auto-generated method stub
   }
}
Run Code Online (Sandbox Code Playgroud)

java android final

1
推荐指数
1
解决办法
152
查看次数

java阻止类覆盖equals

我想使用java.util.Set(和其他集合),但有一个扭曲:我想contains(),add()等等,总是调用对象equals()(这是基于身份而不是更平等的操作).我想我有办法,但它有很大的缺点.有没有正确的方法来做到这一点?对不起,如果我错过了一些明显的东西.

这就是我所做的:

public class OnlySelfEqual {
    public final boolean equals(Object o){
        return super.equals(o);
    }
}

public class Example{
    private Set<T extends OnlySelfEqual> set;
    //etc
}
Run Code Online (Sandbox Code Playgroud)

我看到的主要问题(可能还有很多其他问题)是所有Ts必须从类扩展而不是实现接口,这是非常严格的.我想我想要的就像一个'反向'接口,它列出了子类型无法实现的方法(覆盖).我很确定不存在.有什么建议?

java overriding final interface

1
推荐指数
1
解决办法
320
查看次数

在java中最终变量分配内存的位置在哪里?

如果在类中声明了最终变量,并且创建了类的多个实例,那么最终变量将在哪里分配内存?是否会出现在所有情况下,还是会独立分配?

java memory final

1
推荐指数
1
解决办法
2209
查看次数

如果非最终字段的值可以更改,那么如何在匿名类类中使用它们?

我之前问过这个问题,但我得不到合适的答案.

如果非最终字段的值可以更改,那么如何在匿名类类中使用它们?

class Foo{
    private int i;
    void bar(){
        i = 10
        Runnable runnable = new Runnable (){
            public void run (){
                System.out.println(i); //works fine
            }//end method run
        }//end Runnable
    }//end method bar
}//end class Foo 
Run Code Online (Sandbox Code Playgroud)

如果在匿名类中使用的局部变量必须final使编译器能够在匿名类代码中内联它们的值,如下所示:

之前:

public class Access1 {
  public void f() {
    final int i = 3;
    Runnable runnable = new Runnable() {
        public void run() {
            System.out.println(i);
        }//end method run
    };//end anonymous class
  }//end method f
}//end class Access1
Run Code Online (Sandbox Code Playgroud)

后:

public class Access1 …
Run Code Online (Sandbox Code Playgroud)

java final field local-variables anonymous-class

1
推荐指数
1
解决办法
787
查看次数

如果引用的静态字段是final,为什么不执行静态初始化程序

class a
{
    static final  int a =5;
    static {
        System.out.println("hi");

    }
}
class b
{
    public static void main(String[] args) {
        System.out.println(a.a);
    }   

}
Run Code Online (Sandbox Code Playgroud)

为什么静态块不运行,输出只是

而如果我从类变量中删除final关键字,则执行静态块并输出

hi 
5
Run Code Online (Sandbox Code Playgroud)

java static final

1
推荐指数
1
解决办法
103
查看次数

是否可以在Java中扩展最终类?

可能重复:

该线程不询问如何扩展final类.它问 为什么声明的类final可能会扩展另一个类.


这个线程:

final类是仅仅是一个类不能扩展.

但是,我有一个我声明的辅助类finalextends另一个类:

public final class PDFGenerator extends PdfPageEventHelper {
    private static Font font;

    private PDFGenerator() {
        // prevent instantiation
    }

    static {
        try {
            BaseFont baseFont = BaseFont.createFont(
                "/Trebuchet MS.ttf",
                BaseFont.WINANSI,
                BaseFont.EMBEDDED
            );

            font = new Font(baseFont, 9);

        } catch(DocumentException de) { 
            de.printStackTrace();

        } catch(IOException ioe) {
            ioe.printStackTrace();
        }
    }

    public static ByteArrayOutputStream generatePDF() throws DocumentException {            
        Document doc …
Run Code Online (Sandbox Code Playgroud)

java inheritance extends final

1
推荐指数
1
解决办法
1万
查看次数

Scala构造函数参数和类/特征/对象成员的final含义

finalScala构造函数参数意味着什么?我有这个例子:

class IntFinalTest(
    val intVal: Int,
    final val finalIntVal: Int,
    var intVar: Int,
    final var finalIntVar: Int) {
  //  intVal = 3 // error: reassignment to val
  //  finalIntVal = 3 // error: reassignment to val
  intVar = 3
  finalIntVar = 3
}

class ArrayFinalTest(
    val arrayVal: Array[Int],
    final val finalArrayVal: Array[Int],
    var arrayVar: Array[Int],
    final var finalArrayVar: Array[Int]) {
  arrayVal(0) = 3
  finalArrayVal(0) = 3
  arrayVar(0) = 3
  finalArrayVar(0) = 3
}
Run Code Online (Sandbox Code Playgroud)

根据编译器输出判断(只有两条标记的行导致错误),finalfinal vals和 …

constructor scala final

1
推荐指数
1
解决办法
158
查看次数

最后以某种方式导致静态行为

我有这样的代码:

public class App {
    private final String some;
    public App(){
        some = "old";
    }
    public static void main(String... args) throws NoSuchFieldException, IllegalAccessException {
        App a = new App();
        a.magic();
        System.out.println(a.some);

    }
    private void magic() throws NoSuchFieldException, IllegalAccessException {
        Field field = this.getClass().getDeclaredField("some");
        field.setAccessible(true);
        Field modifiersField = Field.class.getDeclaredField("modifiers");
        modifiersField.setAccessible(true);
        modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
        field.set(this, "new");
        String someDuplicate = (String) field.get(this);
        System.out.println(someDuplicate);
    }
}
Run Code Online (Sandbox Code Playgroud)

这个输出将是

new 
new
Run Code Online (Sandbox Code Playgroud)

但如果我将变量初始化更改为:

private final String some = "old";
Run Code Online (Sandbox Code Playgroud)

输出将是

new
old
Run Code Online (Sandbox Code Playgroud)

看起来像内联初始化会导致最终非静态字段的静态行为

我找不到这种行为的任何码头参考,可能有一些合理的解释.

顺便说一句,init方式的这种方式会导致类似于构造函数初始化的行为:

{ …
Run Code Online (Sandbox Code Playgroud)

java reflection static final

1
推荐指数
1
解决办法
44
查看次数