在一个XAML文件(WPF用户控件),有引用一个的方式内部类 "B"在另一个类中的"A"定义的?
public class A
{
public class B
{
}
}
Run Code Online (Sandbox Code Playgroud)
就像是 :
<local:A.B ... />
Run Code Online (Sandbox Code Playgroud)
此语法不起作用,因为"B"被解释为一个名为"B"类"A"的属性.
我尝试了更多异国情调的语法,如"::"或"+",但似乎都没有.
我目前正在使用带有VS2010的Silverlight 4.
在此先感谢您的帮助.
代码示例:
public class Foo
{
public class Bar
{
public void printMesg(String body)
{
System.out.println(body);
}
}
public static void main(String[] args)
{
// Creating new instance of 'Bar' using Class.forname - how?
}
}
Run Code Online (Sandbox Code Playgroud)
是否可以创建类Bar的新实例给它的名字?我试着用:
Class c = Class.forName("Foo$Bar")
Run Code Online (Sandbox Code Playgroud)
它找到了类,但是当我使用c.newInstance()时它会抛出InstantiationException.
package com.test;
public class OuterClass {
public class InnerClass {
public class InnerInnerClass {
}
}
public class InnerClass2 {
}
//this class should not exist in OuterClass after dummifying
private class PrivateInnerClass {
private String getString() {
return "hello PrivateInnerClass";
}
}
public String getStringFromPrivateInner() {
return new PrivateInnerClass().getString();
}
}
Run Code Online (Sandbox Code Playgroud)
当javac在命令行上运行时Sun JVM 1.6.0_20,此代码生成6个.class文件:
OuterClass.class
在OuterClass $ 1.class
在OuterClass $ InnerClass.class
在OuterClass $ InnerClass2.class
在OuterClass $ $将InnerClass InnerInnerClass.class
在OuterClass $ PrivateInnerClass.class
在eclipse中运行JDT时,它只生成5个类.
OuterClass.class
$在OuterClass 1.class …
我来自Java背景,我想在php中使用内部类.每次我放入内部类时,都会出现语法错误.这可能用PHP吗?另外,我如何引用外部类?我可以访问其所有数据成员吗?
<?php
class OuterClass {
var $x = 15;
function __construct() {
}
class InnerClass { // error when InnerClass is static
function __construct() { // error when InnerClass is static
echo $x;
}
}
}
?>
Run Code Online (Sandbox Code Playgroud)
这用于特定纸牌游戏的MoveClass(如在移动中).我认为将这些课程放在一起是一件很好的设计,因为它们没有任何区别.此外,MoveClass需要了解Game类的一些数据成员.为什么不把它变成一个功能呢?它太大了.
编辑:
嵌套类怎么样?据我所知,那些必须是静态的?O_O
如果我有这样的嵌套类:
class MyClass
{
class NestedClass
{
public:
// nested class members AND definitions here
};
// main class members here
};
Run Code Online (Sandbox Code Playgroud)
目前,定义MyClass是在CPP文件中,但定义NestedClass是在头文件中,也就是说,我不能在CPP文件中声明函数/构造函数.
所以我的问题是,如何定义NestedClasscpp文件中的函数?如果我不能,那是什么原因(如果是这种情况,我对于为什么会发生这种情况有一个模糊的想法,但我想要一个很好的解释)?结构怎么样?
是否可以使用Java反射从另一个类实例化私有内部类.例如,如果我采用此代码
public class Main {
public static void main(String[] args) {}
}
class OtherClass {
private class Test {}
}
Run Code Online (Sandbox Code Playgroud)
是否可以从类main中的main方法实例化并获得对Test的访问权限.
我正在研究一些C++,现在我正在与Java对抗它的相似之处.我知道Java中内部类的目的,但现在我正在尝试在C++中使用嵌套类,并且我发现"容器"类的私有属性不是嵌套类可见的,所以为什么我应该使用它们呢?另外,有没有办法使这些属性可见?
最近,我项目的安全团队发布了一个安全的代码指南文档,旨在用作我们的代码审查的一部分.让我印象深刻的第一件事是"不要使用内部课程".我认为这似乎是一个非常沉重和彻底的声明.如果使用正确,内部类是好的吗?但我做了一些谷歌搜索并找到了这个,为方便起见,这里引用.
规则5:不要使用内部类
一些Java语言书籍说内部类只能被包含它们的外部类访问.这不是真的.Java字节代码没有内部类的概念,因此内部类由编译器转换为恰好可以被同一个包中的任何代码访问的普通类.规则4表示不依赖于包装范围进行保护.
但等等,情况变得更糟.内部类可以访问封闭外部类的字段,即使这些字段被声明为私有.内部类被翻译成一个单独的类.为了允许这个单独的类访问外部类的字段,编译器以静默方式将这些字段从私有更改为包范围!内部类暴露出来已经够糟糕了,但更糟糕的是,编译器正在默默地推翻你将某些字段设为私有的决定.如果你能提供帮助,请不要使用内部类.(具有讽刺意味的是,新的Java 2 doPrivileged()API使用指南建议您使用内部类来编写特权代码.这是我们不喜欢doPrivileged()API的一个原因.)
我的问题是
如何super从内部类访问外部类?
我重写了一个让它在不同的线程上运行的方法.从内联线程,我需要调用原始方法,但当然只是调用method()将变成无限递归.
具体来说,我正在扩展BufferedReader:
public WaitingBufferedReader(InputStreamReader in, long waitingTime)
{
[..]
@Override
public String readLine()
{
Thread t= new Thread(){
public void run()
{
try { setMessage(WaitingBufferedReader.super.readLine()); } catch (IOException ex) { }
}
};
t.start();
[..]
}
}
Run Code Online (Sandbox Code Playgroud)
这个地方给了我一个我无法找到的NullPointerException.
谢谢.
我们知道可以使用外部类的实例访问非静态内部类,因此静态方法在非静态类中意义不大。但是从 Java 16 开始,允许在非静态内部类中使用静态方法。
为什么首先存在这个限制?为什么在较新的版本中允许这样做?
public class OuterClass {
class InnerClass {
static void printMe() {
System.out.println("Inside inner class");
}
}
public static void main(String[] args) {
InnerClass.printMe();
}
}
Run Code Online (Sandbox Code Playgroud) inner-classes ×10
java ×6
c++ ×2
class ×2
reflection ×2
java-16 ×1
member ×1
nested-class ×1
php ×1
private ×1
security ×1
wpf ×1
xaml ×1