Tag: 内部类

java中的内部类和本地内部类之间有什么区别?

如果一个类是一个本地内部类,这是否意味着它在另一个类的方法中,或者它是否意味着它只是在某个地方的另一个方法中定义。 例如,在下面的代码中,MenuListener是否被视为内部本地类? import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MenuDemo extends JFrame{ private Container c; private ImageIcon[] images = new ImageIcon[5]; private JLabel picture; private JPanel mainPanel; private JMenuBar menuBar; private JMenu menu; private JMenuItem bird,cat,dog,rabbit,pig; public MenuDemo() { super(“Menu Demo”); c = getContentPane(); c.setLayout(new BorderLayout()); mainPanel = new JPanel(); // Store the animal […]

JLS的哪一部分表示匿名类不能拥有public / protected / private成员类

考虑这段代码: public class TopLevelClass { Cloneable c = new Cloneable() { private int privateField; private void privateMethod() {}; }; } 有一个匿名类,它有一个private成员字段和一个private成员方法。 它已成功编译。 然后考虑这个: public class TopLevelClass { Cloneable c = new Cloneable() { private class PrivateInnerClass {} }; } 有一个匿名类,它有一个private成员类。 然而… javac说: error: modifier private not allowed here Eclipse说: Illegal modifier for the local class […]

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

我有两个编译单元: 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: ” + […]

关于Java中的本地最终变量

在java Program中,参数在方法声明中定义为String 。 但是在方法定义中,它作为final String变量被访问。 它是否会导致某些问题(如安全性,内存问题)? 例如: 方法声明 join(String a,String b); 方法定义 public void join(final String a,final String b) { Authenticator au = new Authenticator(){ public PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication(a,b)} }; } 请帮助我,澄清我的疑虑。 提前致谢 PS我正在访问a和b作为最终变量,因为我必须在内部类中使用它。

如何将非final变量传递给匿名内部类?

我有这些代码行。 我知道你不能将非final变量传递给内部类但我需要将变量i传递给匿名内部类以用作seatID。 你能建议这样做的方法吗? JButton [] seats = new JButton [40]; //creating a pointer to the buttonsArray for (int i = 0; i < 40; i++) { seats[i] = new JButton();//creating the buttons seats[i].setPreferredSize(new Dimension(50,25));//button width panel4seating.add(seats[i]);//adding the buttons to the panels seats[i].addActionListener(new ActionListener() { //anonymous inner class public void actionPerformed(ActionEvent evt) { String firstName = […]

由于某些中间构造函数,没有包含MySuperClass 类型的封闭实例

我试图使用超类型的内部类,它使用generics。 上面有那个奇怪的错误。 class MySuperClass { class InnerClass { } MySuperClass(InnerClass… c) { } } 在子类中,我试图实例化它: class MySubClass extends MySuperClass { MySubClass() { super(new InnerClass(), new InnerClass()); } } 编译器让我困惑 No enclosing instance of type MySuperClass is available due to some intermediate constructor 为什么?

内部类非最终变量java

我需要更改内部类中的变量,并且我得到了臭名昭着的“不能引用在不同方法中定义的内部类中的非final变量”错误。 void onStart(){ bt.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { int q = i; } }); } 我很快创建了一个类,它包含了我想要改变的所有内容,并在内部类之外创建了类的最终版本 class temp{ int q; } void onStart(){ final temp x = new temp(); bt.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { xq = i; } }); } 这似乎是我需要的,它的工作原理,但我想知道这是如何正确解决问题。 另外,我真的很讨厌用temp这个词命名我的class级。 对于我所做的事情,是否有一个实际的编程术语,以便为我的课程创建一个更具描述性的名称?

Java内部可见性难题

考虑以下情况: public class A { public A() { b = new B(); } B b; private class B { } } 从Eclipse中的警告我引用:java编译器通过合成访问器方法模拟构造函数AB()。 我想编译器现在继续为B创建一个额外的“水下”构造函数。 我觉得这很奇怪:为什么B级不能作为A中的ako场可见? 并且:这是否意味着B类在运行时不再是私有的? 并且:为什么表示B类的受保护关键字不同? public class A { public A() { b = new B(); } B b; protected class B { } }

引用非final变量:为什么这段代码会编译?

首先,如果这是一个重复的问题,我道歉。 我找到了许多类似的,但没有一个直接解决我的问题。 为了准备即将到来的考试,我正在做一篇过去的论文。 它有一个提供代码段的问题。 我们必须声明它是否编译,如果不编译,则写入发生第一个编译器错误的行并解释它。 这是片段: public static void main(String[] args) { JFrame f = new JFrame(“hi”); JTextField jtf = new JTextField(50); jtf.addMouseMotionListener(new MouseMotionAdapter() { public void mouseMoved(MouseEvent evt) { jtf.setText(evt.getLocationOnScreen().toString()); } }); f.add(jtf); f.setVisible(true); } 我期待它不能编译,因为jtf不是final 。 我通过在Eclipse中输入上面的代码来测试我的理论,它标记了预期的错误,但编译并运行得很好。 只有在将鼠标hover在JTextField之后才会出现预期的错误: java.lang.Error:未解决的编译问题:无法引用封闭范围中定义的非最终局部变量jtf 我做了一些搜索,发现Eclipse使用自己的Java编译器版本。 所以我在Eclipse之外重新创建了文件,并通过命令行编译/运行它。 它编译时没有错误或警告,当鼠标hover在文本字段上时,显示所需的java.awt.Point[x=…,y=…] 。 我对匿名内部类的理解是他们可以访问: 封闭类的字段 封闭类的方法 封闭范围的局部变量,只要它们是final 那么我错过了什么? 据我所知,这段代码不适用 。

Java:如何检查对象是否是非静态内部类的实例,而不管外部对象是什么?

如果我有一个内部阶级,例如 class Outer{ class Inner{} } 有没有办法检查任意Object是否是任何Inner的实例,无论其外部对象是什么? 当对象不是来自同一Outer Inner时, instanceof给出false。 我知道一个解决方法就是让Inner成为一个静态类,但我想知道我问的是否可行。 例: class Outer{ Inner inner = new Inner(); class Inner{} public boolean isInner(Object o){ return o instanceof Inner; } } Outer outer1 = new Outer(); Outer outer2 = new Outer(); boolean answer = outer1.isInner(outer2.inner); //gives false