小编J.S*_*eve的帖子

从父类返回子类

我有一个构建器类,它从大多数方法返回以允许菊花链.为了使这个工作与子类,我希望父方法返回子的实例,以便子方法可用于链到最后.

public class BaseBuilder<T extends BaseBuilder<T>> {
    public T buildSomething() {
        doSomeWork();
        /* OPTION #1: */ return this;     // "Type mismatch: cannot convert from BaseBuilder<T> to T"
        /* OPTION #2: */ return T.this;   // "Type mismatch: cannot convert from BaseBuilder<T> to T"
        /* OPTION #3: */ return (T) this; // "Type safety: Unchecked cast from SqlBuilder<T> to T"
    }
}

public class ChildBuilder extends BaseBuilder<ChildBuilder> {}
Run Code Online (Sandbox Code Playgroud)

选项#1和#2导致编译错误,选项#3导致警告(尽管可以抑制@SuppressWarnings("unchecked")).这里有更好的方法吗?我怎样才能安全地将Basebuilder投降给Childbuilder?

java generics inheritance types casting

11
推荐指数
1
解决办法
2327
查看次数

ID与UniqueID对比ClientID与UniqueClientID对比StaticClientID?

好吧,我对动态创建的控件的ID感到很困惑.

Public Class TestClass
    Inherits Panel
    Implements INamingContainer

    Function TestClassInit() Handles Me.Init

        Dim pnlMainPanel As New Panel
        Me.Controls.Add(pnlMainPanel)

        Dim pnlTest1 As New Panel
        pnlMainPanel.Controls.Add(pnlTest1)

        pnlTest1.ClientIDMode = UI.ClientIDMode.Inherit ' DEFAULT
        'pnlTest1.ID = "ctl01"
        'pnlTest1.UniqueID = "ctl00$MainPanel$ctl01"
        'pnlTest1.ClientID = "MainPanel_ctl01"
        'pnlTest1.UniqueClientID = "ctl00_MainPanel_ctl01"
        'pnlTest1.StaticClientID = ""

        pnlTest1.ClientIDMode = UI.ClientIDMode.Predictable
        'pnlTest1.ClientID = "MainPanel_ctl01" (no change)

        pnlTest1.ClientIDMode = UI.ClientIDMode.AutoID
        'pnlTest1.ClientID = "ctl00_MainPanel_ctl01"

        pnlTest1.ClientIDMode = UI.ClientIDMode.Static
        'pnlTest1.ClientID = ""

    End Function
End Class
Run Code Online (Sandbox Code Playgroud)

为什么5个不同的ID?

什么时候应该使用不同的ID模式?

(我阅读了MSDN文档,但它们像往常一样,并不是特别有启发性.)

如果我不在乎ID是什么,只想添加一个控件并将其ID提供给动态添加的AJAX扩展器,我应该使用哪种模式/ ID组合?

javascript vb.net asp.net ajax dom

8
推荐指数
1
解决办法
6680
查看次数

在VB.net中添加关键字?("存在"vs"IsNot Nothing")

IsNot Nothing 很常见,但这是一个双重否定= o

我想Exists改用.有没有我可以在我的VB词汇中添加关键字?

现在,我写了一个扩展,_Exists()作为属性添加到每个对象.我经常使用它,但我仍然更喜欢实际的关键字.

<HideModuleName()>
Public Module CustomExtensions

    ''' <summary>
    ''' Returns <c>True</c> if [object] is not <c>Nothing</c>; otherwise <c>False</c>.
    ''' </summary>
    <System.Runtime.CompilerServices.Extension()>
    Public Function _Exists(obj As Object) As Boolean
        Return obj IsNot Nothing
    End Function

End Module
Run Code Online (Sandbox Code Playgroud)

我独家使用Visual Studio 2010,所以如果我可以欺骗VS将我的自定义短语转换为标准语法,那对我有用.

谢谢!

vb.net keyword visual-studio

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

引用.aspx页上的代码隐藏属性?

在.aspx页面上,将服务器控件的属性链接到页面类的属性(其代码隐藏)的最佳方法是什么?我读过的唯一方法是使用数据绑定:

<asp:TextBox ID="txt" runat="server" Text='<%# Me.SomePropOfMine %>' />
Run Code Online (Sandbox Code Playgroud)

然后从Me.txt.DataBind()Me.Databind()从后面的代码中调用。是否有任何方法可以单独在.aspx页上建立这种关系,或者如果您有许多要绑定的控件(不绑定整个页),则可以简化该过程吗?

.net vb.net asp.net code-behind

3
推荐指数
1
解决办法
8932
查看次数

ASP.net:单例类,每个请求只实例化一次?

我有一个叫做UserContext跟踪我网站上给定用户活动的课程.它应该是一个单例类(每个用户只有一个实例).在Windows窗体应用程序中,我可以写这样的东西:

Class UserContext

    Public Shared Current As New UserContext()

    Private Sub New(appName As String)

    [...]

End Class
Run Code Online (Sandbox Code Playgroud)

但是在ASP.net应用程序上,这将在所有当前用户之间共享.

如果这个类只在一个Page实体中使用,我可以将UserContext实例存储在一个Page变量中 - 它不一定需要在回发中存活.但是其他实体(不了解Page)也调用UserContext,我希望它们都被赋予相同的实例.

我该怎么做才能确保每个http请求(或每个用户)只对一个类进行一次实例化? 我可以使用缓存吗?

Public Shared Function GetContext() As UserContext
    If HttpContext.Current.Cache("CurrentUserContext") Is Nothing Then HttpContext.Current.Cache("CurrentUserContext") = New UserContext()
    Return HttpContext.Current.Cache("CurrentUserContext")
End Function
Run Code Online (Sandbox Code Playgroud)

可能会议状态是更好的选择吗?

缓存和会话状态都存在回发 - 是否有另一个选项随每个新请求重置?

谢谢你的帮助!

asp.net session singleton instantiation httpwebrequest

3
推荐指数
1
解决办法
1535
查看次数

错误?如果通过三元运算符为可空整数赋值,则它不能为空

dim val1 As Integer? = If(5 > 2, Nothing, 43)
' val1 = 0

dim val1 As Integer? = If(5 > 2, Nothing, Nothing)
' val1 = Nothing
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?这是一个错误,还是我忽略了什么?

vb.net nullable ternary-operator

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

杰克逊无视@JsonIgnore?

我有一个带有“只读”函数的类,该类不应序列化为 JSON 对象。因为函数的名字以“get”开头,Jackson 抓住了它,并且似乎不尊重附加的@JsonIgnore标签:

import org.codehaus.jackson.annotate.JsonIgnore;

public class MyClass {

    publicMyClass() {}

    @JsonIgnore
    public String getSomeValue() {return "";}
}
Run Code Online (Sandbox Code Playgroud)

我还尝试使用以下语法:

import org.codehaus.jackson.annotate.JsonIgnoreProperties;

@JsonIgnoreProperties({"someValue"})
public class MyClass {

    publicMyClass() {}

    public String getSomeValue() {return "";}
}
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,生成的 JSON 输出都是相同的:

{someValue:""}
Run Code Online (Sandbox Code Playgroud)

(我们在 Spring MVC 中使用 Jackson 1.9.13。)

除了重命名函数以从“get”以外的东西开始,我还能做些什么来防止杰克逊序列化这个函数的输出?

java serialization spring spring-mvc jackson

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