小编Bri*_*n S的帖子

Java:当方法明确存在时NoSuchMethodException

在我目前的项目中,我觉得有必要使用反射在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 reflection

41
推荐指数
3
解决办法
6万
查看次数

使用Java Bean有什么好处?

我相信我理解Java Beans是什么:包含no-arg构造函数的Java类是可序列化的,并使用getter和setter公开它们的字段.

  1. Java Bean是否必须公开其所有字段才能获得bean的资格?如果不是,它甚至不得暴露任何

  2. May Java Beans是否包含带参数的构造函数以及无参数构造函数?

  3. Java Bean的目的是什么,除了符合某种编码风格?似乎有很多关于'豆豆'或'豆豆'的讨论,但我不知道为什么它们是有利的,特别是.

我完全可以制作no-arg构造函数.可能有很多原因,如果无参数构造函数帮助编译器进行一些优化,我也不会感到惊讶.我也可以理解让你的课程可序列化.即使该类从未被序列化,也可能是,并且回溯可能会令人讨厌(或者在黑盒子库中不可能).

但最令人好奇的是要求所有字段都可以通过getter和setter访问.当我需要它时,我确实在我自己的工作中使用它们,但Java Beans需要它们(可能所有这些,取决于我对#1的回答)似乎很奇怪.如果它是反射的问题,那么反射是否也不容易得到字段?如果这不仅仅是设置值的问题,那么如果方法存在,反射是否不能在字段上使用getter/setter?

java javabeans

24
推荐指数
2
解决办法
2万
查看次数

结合PHP和HTML的首选方法?

我通过浏览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编程的"现实世界"中,首选方法是什么:

  • 带有HTML字符串的PHP文件
  • 用PHP块分解的HTML文件
  • PHP和HTML完全分开(我希望?)
  • 别的什么?

html php templates separation-of-concerns

10
推荐指数
2
解决办法
1万
查看次数

Firefox与Chrome中的输入宽度奇怪

我在flex布局中有一些数字输入,这些输入没有像Firefox中预期的那样大小,我不明白为什么.

Chrome中的结果: 铬输出

Firefox中的结果: 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)

html css firefox google-chrome

6
推荐指数
1
解决办法
2149
查看次数

在getWritableDatabase/getReadableDatabase之后没有调用onCreate

我的应用程序有一个包含三个表的数据库:一个用于存储其跟踪的人员的名称,一个用于跟踪正在进行的事件,另一个用于设置缺少更好的术语.

我在应用程序启动时加载第一个表.我要求一个可读的数据库加载成员显示,然后我在列表更改时写入数据库.我在这里没有问题.

然而,另外两张桌子,我无法上班.辅助类中的代码与类名和列名的例外相同,并且(至少在我尝试访问表的那一点之前)使用该表的代码也几乎相同.

这是我的助手类的代码(我为每个表都有一个单独的帮助器,正如我所说,除了类名和列之外它是相同的):

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)

database android

2
推荐指数
1
解决办法
2013
查看次数

LINQ Design Curiosity:Skip/Take vs. SkipWhile/TakeWhile

有没有什么特别的原因有不同的方法SkipSkipWhile相同的方法,而不是简单地重载?

我的意思是,相反的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>),所以我怀疑这就是原因.

同样的问题也适用于TakeTakeWhile,这是免费的上面.

编辑:为了澄清,我知道变体之间的功能差异,我只是询问关于方法命名的设计决策.

c# linq

2
推荐指数
1
解决办法
1220
查看次数

动态 List&lt;T&gt;.Add 抛出 RuntimeBinderException

我正在为 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)

c# reflection dynamic

2
推荐指数
1
解决办法
1665
查看次数

如何在子类中使用基类重写ToString()方法?

基类:

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)

c#

0
推荐指数
1
解决办法
1778
查看次数