Tag: 可见性

在thread.start之前发生的所有事情都可以生成调用start的线程吗?

现在已经有很好的答案已经在stackoverflow上,但他们没有给我我想要的明确答案。 假设你有一个方法 Dosomething(); doAnother(); int x = 5; Runnable r = new Runnable(){ public void run(){ int y = x; x = 7; System.out.println(z);} } new Thread(r).start() 现在同时这个方法正在运行,在调用thread.start之前,一些全局非易失性变量z从4变为5。 由于z发生在thread.start之前,程序是否会保证打印5? 另外,如果我们以这种方式讨论它,那么可以肯定地说thread.start()永远不会被重新排序。 根据被调用的那个线程的意义开始,就好像到那一点的一切都是顺序的。 比如说我们有 int k = 8; new Thread(() -> {}).start() 现在……在该线程的视角中,无论是首先调用start还是分配k,都不会产生影响。所以这可以重新排序,但是因为在保证之前发生了,这是不可能的? java规范没有说明这一点的强烈声明。 相反它说 当一个语句调用Thread.start()时,每个语句都与该语句有一个before-before关系 然而,k = 8并不是在与该陈述的关系之前发生的…… 我甚至不确定他们的意思是在与start方法的关系之前发生了什么事情,除非您使用相同的监视器锁定 synchronized(this){ int k = 8;} synchronized(this) { […]

方法不会覆盖Eclipse中的包可见方法

从Eclipse Java编译器设置: Method不会覆盖包可见方法 “程序包默认方法在另一个程序包中不可见,因此无法覆盖。启用此选项后,编译器会将此类情况指示为错误或警告。” 如何触发此警告/错误? 我正在寻找一个代码示例。

如何删除旧的JPanel并添加新的JPanel?

我想从Window(JFrame)中删除旧的JPanel并添加一个新的JPanel。 我该怎么办? 我尝试了以下方法: public static void showGUI() { JFrame frame = new JFrame(“Colored Trails”); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(partnerSelectionPanel); frame.setSize(600,400); frame.setVisible(true); } private static void updateGUI(final int i, final JLabel label, final JPanel partnerSelectionPanel) { SwingUtilities.invokeLater( new Runnable() { public void run() { label.setText(i + ” seconds left.”); } partnerSelectionPanel.setVisible(false); \\ <———— } ); } 我的代码更新了“旧”JPanel,然后它使整个JPanel不可见,但它不起作用。 编译器抱怨<————指示的行。 它写道: […]

scala类中属性的可见性

我通过以下方式在我的类的构造函数中定义了一个属性: class Step(val message:String = “”) 当我尝试从Java代码访问消息值时,会出现可见性错误。 为什么?

从inheritance的受保护Java字段创建公共访问器

我该如何进行以下工作: class Foo extends javax.swing.undo.UndoManager { // increase visibility – works for method override def editToBeUndone: javax.swing.undo.UndoableEdit = super.editToBeUndone // fails for field def edits: java.util.Vector[javax.swing.undo.UndoableEdit] = super.edits } 请注意, edits是CompoundEdit ( UndoManager的超类)中的受保护字段。 我想要一个具有相同名称的公共访问器来读取该字段。 我该怎么办? :8: error: super may be not be used on variable edits def edits: java.util.Vector[javax.swing.undo.UndoableEdit] = super.edits ^

您是否在Java中使用默认(包)可见性?

java中的默认可见性意味着只有同一java包中的其他类才能访问它。 我当然看到它的使用,并在几个场合使用过它。 另一方面,我遇到的默认可见性的90%仅来自忘记添加任何可见性关键字的开发人员。 所以,一方面,有合法用途,另一方面,它经常掩盖坏代码。 您在开发团队中做了什么?

安全出版没有发生 – 之前? 无论如何除了最后?

根据JCP(16.2.2。安全出版物): 这种情况发生之前 – 保证实际上是一种比安全出版物更强的可见性和排序承诺 。 当X安全地从A发布到B时,安全发布保证了X的状态的可见性,但不保证A可能触及的其他变量的状态。 但是如果A在队列中放置X,那么在B从该队列中取出X之前,不仅B在A离开它的状态下看到X(假设X后来没有被A或其他任何人修改过),但B看到A在切换之前所做的一切(再次,同样需要注意) 我想知道什么时候安全发布可以没有发生 – 也就是说没有使用volatile / atomics或同步(或通过使用任何内部列出的AQS之类的框架)? 一种情况是不可变对象中的最终字段,您可以将其发布为没有任何其他步骤。 还有其他案件吗? UPD:重新阅读3.5.3。 安全发布惯用语,另一种情况 – “从静态初始化程序初始化对象引用”。 现在看来这些都是选择。

在同一个包中访问私有内部类

我有两个编译单元: public class OuterClass{ private static class InnerClass{ public String test(){ return “testing123”; } } public static void main( String[] args ){ new CallingClass().test( new InnerClass() ); } } public class CallingClass{ public void test( Object o ){ try{ Method m = o.getClass().getMethod( “test” ); Object response = m.invoke( o ); System.out.println( “response: ” + […]

如何在单击按钮后使用不可见属性“可见”创建视图

我有几个视图,文本视图和一个具有android:visibility =“invisible”属性的按钮。 我的目标是单击位于这些“不可见”小部件上方的按钮,以便这些小部件变得可见。 我创建了另一个名为“VisibilityActivity.java”的java类,并尝试了以下方法。但由于某些原因,当我运行应用程序时,按钮没有做任何事情。我不知道我错过了什么。 这是代码: import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class VisibilityActivity extends Activity { private View mVictim; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.new_property3); mVictim = findViewById(R.id.horizontalRule1); mVictim = findViewById(R.id.TextView03); mVictim = findViewById(R.id.horizontalRule2); Button submitRating = (Button) findViewById(R.id.submitRatingButton); submitRating.setOnClickListener(mVisibleListener); } OnClickListener mVisibleListener = new OnClickListener() { public […]

从单独的类文件访问公共静态类的状态

我在另一个公共类中有一个公共静态类,如下所示: public class Foo { public static class Bar{ A firstBar; Bar(A setBar){ this.firstBar=setBar; } } public final Bar instanceBar; public Foo(A actualValue) { instanceBar = new Bar(actualValue); } public Bar getBar() { return instanceBar; } 我的目标是从没有get方法的单独的类文件中访问instanceBar的状态,而不改变firstBar的可见性。 我该如何做到这一点? 例如,以下说不not visible 。 public class RetrieveFirstBar { public static void main(String[] args) { Foo z = new […]