小编Sam*_*der的帖子

Java:在方法返回中使用泛型,它与泛型类参数不同


    class SomeClass<E> {
       Map<String, String> someMethod();
    }

和用法


    SomeClass a = new SomeClass();
    a.someMethod().get("foo") // returns object, not string!

    //This code would not even compile
    String s = a.someMethod().get("foo");

但是,如果我从SomeClass中删除泛化(<E>) - 它可以工作.

如果我将此方法提取到接口并在声明中使用接口,它也可以工作:


    interface Foo {
     Map<String, String> someMethod();
    }

    class SomeClass implements Foo {
    //.....
    }

    Foo foo = new SomeClass();

    String s = foo.someMethod().getString("A");//it works

为什么会这样?我在哪里可以阅读它?什么是最好的解决方案?谢谢.

java generics

4
推荐指数
1
解决办法
178
查看次数

具有多个装饰器的装饰器图案和结构图

我正在尝试使用结构图连接一系列装饰器,但我遇到了一些问题.

我已经阅读了这个问题,这让我能够拥有一个装饰类,但我似乎无法让多个级别的装饰工作.我所拥有的是类A,它将连接字符串作为参数,然后是类B和类C,它们都是类A的装饰器.我可以使用结构图创建包装A的B但是我似乎无法获得C包装B包装一个.

这适用于1级:

For<IQuestionRepository> ()
                .Use<LinqToSqlQuestionRepository> ()
                    .Ctor<string>("connectionString")
                    .Is(x=>System.Configuration.ConfigurationManager.ConnectionStrings["aspnetdbConnectionString"].ConnectionString)
                .EnrichWith (x=>new RecentQuestionCachedRepository(x))
Run Code Online (Sandbox Code Playgroud)

我认为只需添加另一个EnrichWith就可以这样工作:

For<IQuestionRepository> ()
                .Use<LinqToSqlQuestionRepository> ()
                    .Ctor<string>("connectionString")
                    .Is(x=>System.Configuration.ConfigurationManager.ConnectionStrings["aspnetdbConnectionString"].ConnectionString)
                .EnrichWith (x=>new RecentQuestionCachedRepository(x))
                .EnrichWith (y=>new FeaturedQuestionCachedRepository(y));
Run Code Online (Sandbox Code Playgroud)

但这只是给了我一个包含LinqToSqlQuestionRepository的FeaturedQuestionCachedRepository,但是RecentQuestionCachedRepository不在堆栈的任何地方.

我究竟做错了什么?

structuremap dependency-injection

4
推荐指数
1
解决办法
1027
查看次数

是否可以将c#嵌入微控制器中

我需要关闭来自电脑命令的灯光.这可能是使用c#吗?

微控制器是否识别c#代码?

c# microcontroller

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

我可以返回特定泛型类型的所有通用对象吗?

我有一个界面:

public interface InterfaceA<S,T>{}
Run Code Online (Sandbox Code Playgroud)

我想加载实现此接口的所有类的实例,而不管通用参数ST.所以我有一个类,有一个方法来做到这一点.方法签名目前是:

public IEnumerable<object> GetInstancesOfImplementingTypes (Type targetType)
Run Code Online (Sandbox Code Playgroud)

通过加载的程序集查找具有一个类型,以反映GetGenericTypeDefinition等于所述GetGenericTypeDefinitiontargetType.我正在使用类型(而不是在方法上有一个T param),所以我不必指定泛型参数,即我可以像这样调用它:

var foundinstances = o.GetInstancesOfImplementingTypes(typeof(InterfaceA<,>))
Run Code Online (Sandbox Code Playgroud)

但我似乎必须将找到的类型的实例作为对象返回.是否有某种方式我可以返回一个比仅仅对象更受约束的类型,因为我知道所有实例都将是一些实现InterfaceA,我只是不知道什么ST将来.

.net generics

4
推荐指数
1
解决办法
69
查看次数

使用DataContractSerializer序列化子类实例的实际方法是什么?

使用DataContractSerializer序列化子类实例的实际方法是什么?

例如,以下是数据类型:

 [DataContract]
    public class Car
    {
        public Car()
        {
            Wheels = new Collection<Wheel>();
        }

        [DataMember]
        public Collection<Wheel> Wheels { get; set; }
    }

    [DataContract]    
    public abstract class Wheel
    {
        [DataMember]
        public string Name { get; set; }
    }

    [DataContract]
    public class MichelinWheel : Wheel
    {
        [DataMember]
        public string Wheel1Test { get; set; }
    }

    [DataContract]
    public class BridgeStoneWheel : Wheel
    {
        [DataMember]
        public string Wheel2Test { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

这是创建带有两个不同车轮的汽车的代码:

    Car car = new Car();

    MichelinWheel w1 = …
Run Code Online (Sandbox Code Playgroud)

wcf serialization datacontract datacontractserializer

4
推荐指数
1
解决办法
1218
查看次数

如何删除从ajax调用返回的JSON生成的Knockout映射数组的成员?

我正在使用knockoutjs和映射插件从服务器调用返回的JSON生成视图模型.我从服务器获取一个数组,创建一个将映射数组作为属性的模型,然后数据将数组绑定到模板以呈现屏幕上的所有数据.哪个效果很好.

我希望每个项目旁边都有一个按钮,可以将其删除,就像在此视频中的示例一样(参见14:20左右).

但是在视频中,他绑定了一个在数组元素上定义的函数.我的元素是使用映射插件从JSON生成的,所以我不确定如何向每个元素添加一个函数,或者我是否想要这样做.或者,我可以单击按钮绑定到viewmodel上的函数并传入与该按钮关联的元素的id吗?

我的javascript:

<script type="text/javascript">
    var supplierModel;

    $(function(){        
        getAllSuppliers();       
    })

    function getAllSuppliers(){
        $.getJSON('/SWM60Assignment/allsuppliers',function(responseData){
            supplierModel = new SupplierModel(responseData);
            ko.applyBindings(supplierModel);            
        });
    }
    var SupplierModel = function (supplierList) {
        var self = this;

        self.suppliers = ko.mapping.fromJS(supplierList);
        self.remove = function(supplierId){
            // how can I get the buttons to call this method with the id 
            // of the element they are the button for?
            alert('remove called with supplier id:'+supplierId);
        }
    };
</script>
Run Code Online (Sandbox Code Playgroud)

这是模板:

<script id="supplierTemplate" type="text/html">
    <li>
        Name: <span data-bind="text:name"></span> Address: <span …
Run Code Online (Sandbox Code Playgroud)

knockout-mapping-plugin knockout.js

4
推荐指数
1
解决办法
4864
查看次数

如何获取/设置简单类型

我是Mockito的新手,我想知道如何存根获取/设置对.

例如

public interface Order {
     public short getStatus();
     public void setStatus(short status);
}
Run Code Online (Sandbox Code Playgroud)

如何使它们正常运行:

如果我在调用的某个地方调用setStatus(4);我想getStatus()返回4.如何才能做到这一点?

java getter setter stub mockito

4
推荐指数
1
解决办法
2805
查看次数

使用实体框架更改持续交付和数据库架构

我们希望能够将我们的应用程序连续交付到生产中.我们目前部署到azure并使用table/blob存储并拥有一个azure sql数据库,我们可以使用该实体访问它.

随着数据库模式的更改,我们希望能够自动将模式更改应用到生产数据库,但是当应用程序处于活动状态并且代码更改同时部署到许多节点时,我们不确定是什么正确的方法是.

经过一些阅读后,似乎(这是有道理的)应用程序需要容忍2个不同的数据库模式版本,因此无论是旧版本的代码还是新版本的代码都无关紧要数据库,但是我不确定在应用程序中处理这个问题的最佳方法是使用实​​体框架.

我们是否应该在代码中具有EF生成的类的版本化实例,这些实例知道如何访问特定版本的模式?更新架构并且针对数据库运行旧版本的代码时会发生什么?

我们的实体框架类映射到db中特定模式的视图,并且没有任何内容映射到底层表,因此可能允许我们创建旧代码使用的v1视图和新代码使用的v2视图,但是保持这个感觉它会有点像一场噩梦(它已经足够痛苦只是维持EF映射到视图而不是表格)

那么这个领域的最佳实践是什么?别人怎么做才能解决这个问题?

c# entity-framework relational-database database-schema continuous-deployment

4
推荐指数
1
解决办法
2140
查看次数

为什么在 c# 中通过启动进程运行 powershell 时不导入 powershell 模块?

我有 ac# 应用程序,它使用以下代码来调用 powershell 脚本:

string scriptFileToExecute = "someScript.ps1;
var startInfo = new ProcessStartInfo();
startInfo.FileName = @"powershell.exe";
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = false;
startInfo.Arguments = string.Format(@"& '{0}' '{1}'", scriptFileToExecute, "argument");

var process = new Process { StartInfo = startInfo };
process.Start();

string output = process.StandardOutput.ReadToEnd();
Run Code Online (Sandbox Code Playgroud)

这工作正常并运行脚本。

但是,当我在脚本中包含这一行时:

Import-Module ServerManager
Run Code Online (Sandbox Code Playgroud)

脚本失败:

errors occurred during script execution: Import-Module : The specified module 'Servermanager' was not loaded because no valid module file was found in any module …

c# windows powershell

4
推荐指数
1
解决办法
1876
查看次数

隐藏折线的正确方法?

我有一个在地图上显示折线的函数,这部分正在工作,现在我想实现一个隐藏折线的函数,但我找不到我的错误,提前致谢。

function cargaMapaCYL(mapa, varControl){
    var limite = null; 
    limite = [
        new google.maps.LatLng(42.49956716,-7.019005501),
        new google.maps.LatLng(42.49947126,-7.029286373),
        new google.maps.LatLng(42.50904062,-7.049299123),
        new google.maps.LatLng(42.50722622,-7.069103626),
        new google.maps.LatLng(42.50452387,-7.000150672),
        new google.maps.LatLng(42.49348015,-6.983058917),
        new google.maps.LatLng(42.49843269,-6.971666546),
        new google.maps.LatLng(42.51765791,-6.956909023),
        new google.maps.LatLng(42.52010069,-6.927429186),
        new google.maps.LatLng(42.50992238,-6.914231493),
        new google.maps.LatLng(42.50096695,-6.879679821),
        new google.maps.LatLng(42.48775868,-6.857775832),
        new google.maps.LatLng(43.23907504,-3.293216584)], "#000000", 5);

    var contorno= new google.maps.Polyline({
        path: limite,
        strokeColor: "#000000",
        strokeOpacity: 1.0,
        strokeWeight: 2
    });
    if(varControl==true){
        contorno.setMap(mapa);
    }
    if(varControl==false){
        contorno.setMap(null);
    }
}
Run Code Online (Sandbox Code Playgroud)

google-maps-api-3

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