我有一个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) 我有一个最终的会员数据:
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是我无法修改的第三方库.
那么,处理这个问题最优雅的方式是什么?
我有一个问题,在尝试几个代码片段时,我遇到了一个代码
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)
每一个都工作正常,代码正在编译. …
我只是在测试我的代码而我正试图这样做,当我点击"推"按钮时,第一个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) 我正在为我的学士论文设计一个程序,根据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) 以下代码是null在一行中检查两次初始化final变量的最佳方法吗?
final String textValue = text != null ? text.getText() != null ? text.getText() : "" : "";
Run Code Online (Sandbox Code Playgroud) 我需要在一个类中创建一个最终字符串并从一个方法中初始化它,我在网上搜索一些说可能有些人说不!
我通过了这个,并在接受的答案中,他说,构造函数可能没有提到非构造函数方法
但是,如果你删除静态,你可以这样做:
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)
任何的想法?
这段代码:
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用过,为什么我不能在这里使用它?
我的意思是,为什么存在defacto不可变对象?为什么我们不只是使用最终的静态修饰符?关于String,Java使它变得不可变的重要性是什么?
我想在下面的场景中使用Java 8 Lambda表达式,但我得到的是在封闭范围内定义的局部变量fooCount必须是final或者有效的final.我理解的错误消息说什么,但我需要计算在这里比例,从而需要增加fooCount和barCount再计算百分比.那么实现它的方法是什么:
// 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但我想避免它,所以稍后如果可能的话我想在这里使用并行流.
final ×10
java ×10
constructor ×2
immutability ×2
static ×2
string ×2
android ×1
eclipse ×1
exception ×1
inheritance ×1
java-8 ×1
lambda ×1
null ×1
public ×1
variables ×1