在我目前的项目中,我觉得有必要使用反射在Java中创建一种模拟回调系统.但是,我在解决实际功能方面遇到了问题.有问题的代码如下:
public Callback(Object parentObj, String methodName, Class<?>...parameters)
{
if(parentObj == null)
throw new IllegalArgumentException("parentObj cannot be null", new NullPointerException());
Class<?> clazz = parentObj.getClass();
// Trace debugging, see output
for(Method m : clazz.getDeclaredMethods())
if(m.getName().equals("myMethod")) System.out.println (m);
try { this.method = clazz.getMethod(methodName, parameters); }
catch(NoSuchMethodException nsme) { nsme.printStackTrace(); } // Exception caught
catch(SecurityException se) { se.printStackTrace(); }
this.parentObj = parentObj;
this.parameters = parameters;
}
Run Code Online (Sandbox Code Playgroud)
当我构造Callback对象时,我使用这样的语法:
new Callback(this, "myMethod", boolean.class)
Run Code Online (Sandbox Code Playgroud)
当我尝试创建我的伪回调时,它会命中NoSuchMethodExceptioncatch块.我在上面包含了一些跟踪调试,以显示我的一个方法的输出失败.输出:
private void my.package.MyClass.myMethod(boolean)
java.lang.NoSuchMethodException: my.package.MyClass.myMethod(boolean)
at java.lang.Class.getMethod(Class.java:1605)
at …Run Code Online (Sandbox Code Playgroud) 我相信我理解Java Beans是什么:包含no-arg构造函数的Java类是可序列化的,并使用getter和setter公开它们的字段.
Java Bean是否必须公开其所有字段才能获得bean的资格?如果不是,它甚至不得暴露任何?
May Java Beans是否包含带参数的构造函数以及无参数构造函数?
Java Bean的目的是什么,除了符合某种编码风格?似乎有很多关于'豆豆'或'豆豆'的讨论,但我不知道为什么它们是有利的,特别是.
我完全可以制作no-arg构造函数.可能有很多原因,如果无参数构造函数帮助编译器进行一些优化,我也不会感到惊讶.我也可以理解让你的课程可序列化.即使该类从未被序列化,也可能是,并且回溯可能会令人讨厌(或者在黑盒子库中不可能).
但最令人好奇的是要求所有字段都可以通过getter和setter访问.当我需要它时,我确实在我自己的工作中使用它们,但Java Beans需要它们(可能所有这些,取决于我对#1的回答)似乎很奇怪.如果它是反射的问题,那么反射是否也不容易得到字段?如果这不仅仅是设置值的问题,那么如果方法存在,反射是否不能在字段上使用getter/setter?
我通过浏览phpBB2来学习PHP ,甚至向他们的数据库提交了一些mod,其他人下载并使用了这些mod.(我不相信phpBB2已经支持了phpBB3这么久了,所以v2 mods数据库不再存在.)
我最喜欢的关于phpBB的一个是他们的模板系统,它让编辑器完全分离HTML和PHP.PHP文件包含PHP:逻辑,数据库查询和激活模板.TPL文件包含模板:HTML,模板变量和专用HTML注释,以允许条件或重复块.
但是,每当我在网上看到某人的PHP代码时,它或者是一个使用单个函数等的小代码片段,或者PHP中充满了包含HTML的字符串(或者更糟糕的是,PHP与PHP散布在一起).phpBB是我看过的唯一一个实际上将语言和标记语言分开的PHP,向我建议很少有其他PHP代码库做这样的事情.
我想再次开始使用一些PHP,但这次它不会是一个phpBB论坛,它将在一个团队中.根据我的经验,PHP和HTML的分离是不常见的(如果我错了,请纠正我!).但是,我已经习惯了那个分界线,我讨厌阅读混合的PHP和HTML.
在PHP编程的"现实世界"中,首选方法是什么:
我在flex布局中有一些数字输入,这些输入没有像Firefox中预期的那样大小,我不明白为什么.
正如您所看到的,XP行不会在Chrome中溢出其父级(没有水平滚动),但它在Firefox(具有水平滚动)中存在显着溢出,在重叠相邻标签文本的数字输入之上.
页面中的相关HTML和CSS是:
/**
* The ".charsheet" prefix on each rule is automatically added
*/
.charsheet .sheet-flexbox-h input[type=number] {
flex: 1 1 40%;
margin-left: 5px;
}
.charsheet .sheet-flexbox-inline > label > span {
white-space: nowrap;
font-size: 89%;
}
.charsheet .sheet-flexbox-h > label {
width: 100%;
display: flex;
flex-direction: row;
}
.charsheet .sheet-flexbox-inline {
display: inline-flex;
width: 100%;
}
.charsheet .sheet-3colrow .sheet-2col:last-child {
width: calc(66% - 5px);
}
.charsheet .sheet-body {
display: block;
overflow-x: visible;
overflow-y: scroll; …Run Code Online (Sandbox Code Playgroud) 我的应用程序有一个包含三个表的数据库:一个用于存储其跟踪的人员的名称,一个用于跟踪正在进行的事件,另一个用于设置缺少更好的术语.
我在应用程序启动时加载第一个表.我要求一个可读的数据库加载成员显示,然后我在列表更改时写入数据库.我在这里没有问题.
然而,另外两张桌子,我无法上班.辅助类中的代码与类名和列名的例外相同,并且(至少在我尝试访问表的那一点之前)使用该表的代码也几乎相同.
这是我的助手类的代码(我为每个表都有一个单独的帮助器,正如我所说,除了类名和列之外它是相同的):
public class db_MembersOpenHelper extends SQLiteOpenHelper
{
public static final String TABLE_NAME = "members_table";
public static final String[] COLUMN_NAMES = new String[] {
Constants.KEY_ID,
"name",
"score"
};
private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_NAME + " ("
+ COLUMN_NAMES[0] + " INTEGER PRIMARY KEY autoincrement, "
+ COLUMN_NAMES[1] + " TEXT, "
+ COLUMN_NAMES[2] + " INTEGER);";
public db_MembersOpenHelper(Context context)
{
super(context, Constants.DATABASE_NAME, null, Constants.DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) { db.execSQL(TABLE_CREATE); …Run Code Online (Sandbox Code Playgroud) 有没有什么特别的原因有不同的方法Skip和SkipWhile相同的方法,而不是简单地重载?
我的意思是,相反的Skip(int),SkipWhile(Func<TSource,bool>)以及SkipWhile(Func<TSource,int,bool>),为什么不能有Skip(int),Skip(Func<TSource,bool>)和Skip(Func<TSource,int,bool>)?我确信它有一些原因,因为整个LINQ系统是由比我更多经验的人设计的,但这种推理并不明显.
这是来心中唯一的可能性已经问题进行解析器的类似于SQL的语法,但已经事物之间的区别就像Select(Func<TSource,TResult>)和Select(Func<TSource,int,TResult>),所以我怀疑这就是原因.
同样的问题也适用于Take和TakeWhile,这是免费的上面.
编辑:为了澄清,我知道变体之间的功能差异,我只是询问关于方法命名的设计决策.
我正在为 OrientDB .Net 库编写一些扩展方法,在 C# 中的模型类和数据库中的图形之间进行映射(反之亦然)。这必然需要一些反射和动态编程。
以下方法用于设置表示顶点之间边的模型对象上的属性值。例如,如果顶点 A 通过边 C 链接到多个顶点 B,则模型 A 可能具有 type 属性,List<B>而模型 B 将具有 type 属性A(对于一对多关系)。
private static void SetLinkedProperty(
ABaseModel parent, ABaseModel child, string className)
{
PropertyInfo[] properties = parent.GetType()
.GetProperties(BindingFlags.Public |
BindingFlags.Instance |
BindingFlags.SetProperty |
BindingFlags.GetProperty);
PropertyInfo propertySingle = properties
.Where(prop => IsModelProperty(prop, className)).SingleOrDefault();
PropertyInfo propertyCollection = properties
.Where(prop => IsModelCollectionProperty(prop, className)).SingleOrDefault();
if (propertySingle != null)
{
propertySingle.SetValue(parent, child);
}
if (propertyCollection != null)
{
dynamic propertyValue = propertyCollection.GetValue(parent);
if …Run Code Online (Sandbox Code Playgroud) 基类:
namespace inheritance
{
public abstract class Shape
{
private string shapeId;
private float length;
public Shape(string s)
{
shapeId = s;
}
public string Id
{
get
{
return shapeId;
}
set
{
shapeId = value;
}
}
public abstract double Area
{ get;
}
public override string ToString()
{
return Id + "Area = " + string.Format("{0:F2}", Area);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我已经覆盖了该ToString方法.
这是我的子类:
namespace inheritance
{
public class Circle : Shape
{
private double area;
public …Run Code Online (Sandbox Code Playgroud)