标签: final

如何在Java中的派生类'构造函数中分配基类的最终变量?

我有一个Color看起来像这样的基类.该类被设计为不可变的,因此结果具有final修饰符且没有setter:

public class Color
{
    public static Color BLACK   = new Color(0, 0, 0);
    public static Color RED = new Color(255, 0, 0);
    //...
    public static Color WHITE   = new Color(255, 255, 255);

    protected final int _r;
    protected final int _g;
    protected final int _b;

    public Color(int r, int b, int g)
    {
        _r = normalize(r);
        _g = normalize(g);
        _b = normalize(b);
    }

    protected Color()
    {

    }

    protected int normalize(int val)
    {
        return val & 0xFF; …
Run Code Online (Sandbox Code Playgroud)

java inheritance final immutability

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

确保在构造函数抛出异常时初始化最终变量

我有一个最终的会员数据:

public final Foo foo;
Run Code Online (Sandbox Code Playgroud)

在构造函数中,foo初始化如下:

foo = new Foo();
Run Code Online (Sandbox Code Playgroud)

现在,不幸的是,Foo的构造函数可能会抛出异常:

try {
    foo = new Foo();
} catch (Exception e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但是现在编译器抱怨foo可能没有被初始化,如果Foo的构造函数抛出异常就是这样.但是如果我把foo = null它放在内部,它会抱怨foo可能已经被初始化了.

Foo是我无法修改的第三方库.

那么,处理这个问题最优雅的方式是什么?

java constructor final exception

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

编译时间错误"最终变量未初始化"

我有一个问题,在尝试几个代码片段时,我遇到了一个代码

class O
{
    final int i;
    O()
    {
        i=10;
    }
    O(int j)// error here as THE BLANK FINAL FIELD i IS NOT INITIALIZED
    {
        j=20;
        System.out.println(j);
    }
}
class Manager3
{
    public static void main(final String[] args) 
    {
        O n1=new O();
        //O n2=new O(10);
        //n1.i=20;
        //System.out.println(j1.i);
    }
}
Run Code Online (Sandbox Code Playgroud)

但如果我用参数注释构造函数我没有得到任何错误.

我的问题是,当我将构造函数放在代码中以及为什么我删除参数化构造函数时没有出现任何错误时,为什么我得到此编译时错误.

我知道我们必须初始化我的最终变量,但我在构造函数中初始化它,因此如果我写这段代码: -

class O
{
    final int i;
    O()
    {
        i=10;
    }

}
class Manager3
{
    public static void main(final String[] args) 
    {
        O n1=new O();

    }
}
Run Code Online (Sandbox Code Playgroud)

每一个都工作正常,代码正在编译. …

java constructor final

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

坚持访问非最终变量?

我只是在测试我的代码而我正试图这样做,当我点击"推"按钮时,第一个textArea打印出"你好".

但是我不断收到这个错误:不能在不同方法中定义的内部类中引用非final变量textArea

这是我的代码:

import java.awt.BorderLayout;
Run Code Online (Sandbox Code Playgroud)

公共类WindowBuilderTest扩展了JFrame {

private JPanel contentPane;
private JTextField textField;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                WindowBuilderTest frame = new WindowBuilderTest();
                frame.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the frame.
 */
public WindowBuilderTest() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setBounds(100, 100, 400, 400);
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    GridBagLayout gbl_contentPane = new GridBagLayout();
    gbl_contentPane.columnWidths …
Run Code Online (Sandbox Code Playgroud)

java eclipse variables user-interface final

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

最终变量不断变化,但不应该

我正在为我的学士论文设计一个程序,根据z位置(电缆中的位置)显示钢丝绳的内部几何形状.

为了测试我"穿过"一段电缆,用这段代码(sl是一个链表,已经初始化,工作正常):

    Cable c = new Cable(sl);
    ImageFrame ts = new ImageFrame(c);

    try {
        while (location <2 ) {
            location = location + 0.01; 
            Thread.sleep(100);
            c.update(location);
            ts.repaint();
        }
        System.exit(0);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
Run Code Online (Sandbox Code Playgroud)

电缆功能update应该重新计算电缆的几何形状.我的类电缆有一个绞线列表,这个update函数的作用就是调用所有这些绞线的更新函数:

public void update(double z) {
for(int i=0;i<strandList.size() ;i++) {
            strandList.get(i).updateStrand(z);

        }

    }
Run Code Online (Sandbox Code Playgroud)

该对象Strand如下所示:

public abstract class Strand {

    Punt middenCable;
    final Punt nulpoint_midden;
    Punt midden;
    Double angle;
    Double d_to_core;
    Image img;
    int img_size;
    BufferedImage bf; …
Run Code Online (Sandbox Code Playgroud)

java final

0
推荐指数
2
解决办法
128
查看次数

单行双重检查

以下代码是null在一行中检查两次初始化final变量的最佳方法吗?

final String textValue = text != null ? text.getText() != null ? text.getText() : "" : "";
Run Code Online (Sandbox Code Playgroud)

java null final

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

从方法初始化的Java final实例变量

我需要在一个类中创建一个最终字符串并从一个方法中初始化它,我在网上搜索一些说可能有些人说不!
我通过了这个,并在接受的答案中,他说,构造函数可能没有提到非构造函数方法

但是,如果你删除静态,你可以这样做:

class A  {    
    private final int x;

    public A()
    {
        x = 5;
    } }
Run Code Online (Sandbox Code Playgroud)

在我的Android案例中,我想这样做

public class MyActivity extends Activity
{
    final String DOWNLOADS_FOLDER_PATH;
    @Override
    public void onCreate(Bundle savedInstanceState)
    { ....

   DOWNLOADS_FOLDER_PATH=Environment.getExternalStorageDirectory().getPath()+"/downloads/";
    // i cant do that neither
    // DOWNLOADS_FOLDER_PATH="s";
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要从一个方法初始化,因为我有一个调用

Environment.getExternalStorageDirectory().getPath()
Run Code Online (Sandbox Code Playgroud)

任何的想法?

java android final

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

无法在java中创建公共静态final String

这段代码:

public class CommandPrompt {
  public static void main(String[] args) {
    public static final String prompt = System.getProperty("user.name")+">";
      System.out.println(prompt);
    }
  }
Run Code Online (Sandbox Code Playgroud)

返回此错误消息:

CommandPrompt.java:5: error: illegal start of expression
public static final String prompt = System.getProperty("user.name")+">";
^
CommandPrompt.java:5: error: illegal start of expression
public static final String prompt = System.getProperty("user.name")+">";
       ^
CommandPrompt.java:5: error: ';' expected
public static final String prompt = System.getProperty("user.name")+">";
             ^
3 errors
Run Code Online (Sandbox Code Playgroud)

我以前见过public static final String用过,为什么我不能在这里使用它?

java string static final public

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

不可变对象(如String)的实际好处是什么,而不是仅使用静态final?

我的意思是,为什么存在defacto不可变对象?为什么我们不只是使用最终的静态修饰符?关于String,Java使它变得不可变的重要性是什么?

java string static final immutability

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

Java 8 Lambda问题在递增计数时有效最终

我想在下面的场景中使用Java 8 Lambda表达式,但我得到的是在封闭范围内定义的局部变量fooCount必须是final或者有效的final.我理解的错误消息说什么,但我需要计算在这里比例,从而需要增加fooCountbarCount再计算百分比.那么实现它的方法是什么:

        // key is a String with values like "FOO;SomethinElse" and value is Long
        final Map<String, Long> map = null;
    ....
    private int calculateFooPercentage() {
        long fooCount = 0L;
        long barCount = 0L;

        map.forEach((k, v) -> {
            if (k.contains("FOO")) {
                fooCount++;
            } else {
                barCount++;
            }
        });

        final int fooPercentage = 0;
        //Rest of the logic to calculate percentage
        ....
        return fooPercentage;
    }
Run Code Online (Sandbox Code Playgroud)

我有一个选择是在AtomicLong这里使用而不是long但我想避免它,所以稍后如果可能的话我想在这里使用并行流.

java lambda final java-8

0
推荐指数
2
解决办法
1070
查看次数